Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 Re : Programmation » Problème Node.js et CORS : dépannage du partage de ressources entre or » 26-10-2023 06:00:52

Salut, je vois que tu galères avec le problème CORS. C'est assez courant quand on fait des requêtes entre différents domaines. Je vais essayer de t'aider avec quelques pistes.

La première chose à faire, c'est d'installer le module cors qui te permet de gérer facilement les headers CORS dans ton application Express. Tu peux le faire avec la commande :

npm install cors

Ensuite, tu peux utiliser le middleware cors pour activer les requêtes CORS pour toutes tes routes, ou seulement pour celles que tu veux. Par exemple, si tu veux autoriser les requêtes CORS pour la route /data, tu peux faire comme ça :

const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;

app.get('/data', cors(), (req, res) => {
const data = { message: 'This is the API response.' };
res.json(data);
});

app.listen(port, () => {
console.log(Server is running on port ${port});
});

Si tu veux autoriser les requêtes CORS pour toutes tes routes, tu peux faire comme ça :

const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;

app.use(cors());

app.get('/data', (req, res) => {
const data = { message: 'This is the API response.' };
res.json(data);
});

app.listen(port, () => {
console.log(Server is running on port ${port});
});

Par défaut, le middleware cors va ajouter le header Access-Control-Allow-Origin: * à tes réponses, ce qui veut dire que tu acceptes les requêtes de n'importe quel domaine. Si tu veux restreindre les domaines autorisés, tu peux passer des options au middleware cors, comme ça :

const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;

// Liste des domaines autorisés
const whitelist = ['http://example1.com', 'http://example2.com'];

// Options pour le middleware cors
const corsOptions = {
origin: function (origin, callback) {
// Si l'origine de la requête est dans la liste blanche, on appelle le callback avec true
if (whitelist.indexOf(origin) !== -1) {
callback(null, true);
} else {
// Sinon, on appelle le callback avec une erreur
callback(new Error('Not allowed by CORS'));
}
}
};

// On utilise le middleware cors avec les options pour la route /data
app.get('/data', cors(corsOptions), (req, res) => {
const data = { message: 'This is the API response.' };
res.json(data);
});

app.listen(port, () => {
console.log(Server is running on port ${port});
});

Tu peux aussi configurer d'autres options pour le middleware cors, comme les méthodes HTTP autorisées, les headers autorisés, etc. Tu peux trouver plus de détails sur la documentation du module corshttps://www.npmjs.com/package/cors.

Pour les requêtes complexes qui nécessitent une requête préliminaire OPTIONS, tu dois ajouter un handler pour cette méthode sur la route que tu veux supporter. Par exemple, si tu veux accepter les requêtes DELETE sur la route /data, tu peux faire comme ça :

const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;

// On active le middleware cors pour la requête OPTIONS sur la route /data
app.options('/data', cors());

// On active le middleware cors pour la requête DELETE sur la route /data
app.delete('/data', cors(), (req, res) => {
// Ici tu fais ce que tu veux pour supprimer les données
res.json({ message: 'Data deleted.' });
});

app.listen(port, () => {
console.log(Server is running on port ${port});
});

En ce qui concerne la sécurité et les bonnes pratiques, il faut être prudent avec les headers CORS et ne pas autoriser n'importe quel domaine ou n'importe quelle méthode. Il faut aussi vérifier l'authentification et l'autorisation des requêtes avant de renvoyer des données sensibles. Tu peux trouver plus d'informations sur les risques et les précautions liés à CORS sur ce site [CORS security].

J'espère que ça t'aide un peu à résoudre ton problème CORS. N'hésite pas à me dire si ça marche ou si tu as d'autres questions. Bon courage !

Pied de page des forums