Erreur Socket.io, NodeJS et ReactJS CORS
Pour commencer, j'ai lu un tas de questions concernant le même problème.
Lorsque j'ouvre la connexion avec le socket via le client React de la manière normale, juste l'URL en tant que paramètre, je n'obtiens pas cette erreur, connexion établie.
Mais quand je fais ça:
const io = ioClient(webSocketUrl, {
transportOptions: {
polling: {
extraHeaders: getAuthenticationToken()
}
}
});
La demande renvoie une erreur CORS à chaque fois.
J'ai essayé de:
Définissez l'origine comme ceci:
io.origins(['*:*']);app.use (function (req, res, next) {res.setHeader ("Access-Control-Allow-Origin", req.header ("origin") || req.header ("x-forwarded-host") | | req.header ("referer") || req.header ("host")); res.header ("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, PATCH, DELETE"); res.header ("Access-Control-Allow-Headers", "X-Requested-With, content-type"); res.setHeader ("Access-Control-Allow-Credentials", false); next ();}) ;
Et aussi ceci:
app.use (cors ()); app.options ("*", cors ());
Aucun des éléments ci-dessus n'a fonctionné.
J'apprécierais toute aide.
Réponses
J'ai trouvé la réponse!
Pour toute personne ayant le même problème, voici comment je l'ai fait:
const io = require("socket.io")(server, {
handlePreflightRequest: (req, res) => {
const headers = {
"Access-Control-Allow-Headers": "Content-Type, Authorization",
"Access-Control-Allow-Origin": req.headers.origin, //or the specific origin you want to give access to,
"Access-Control-Allow-Credentials": true
};
res.writeHead(200, headers);
res.end();
}
});