Socket.io、NodeJS、ReactJSCORSエラー
手始めに、私は同じ問題に関するたくさんの質問を読みました。
通常の方法でReactクライアントを介してソケットとの接続を開くと、パラメーターとしてURLだけが表示され、このエラーは発生せず、接続が確立されます。
しかし、私がこれを行うとき:
const io = ioClient(webSocketUrl, {
transportOptions: {
polling: {
extraHeaders: getAuthenticationToken()
}
}
});
リクエストは毎回CORSエラーを返します。
私はしようとしました:
次のように原点を設定します。
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();}) ;
そしてまたこれ:
app.use(cors()); app.options( "*"、cors());
上記のどれもうまくいきませんでした。
助けていただければ幸いです。
回答
答えが見つかりました!
同じ問題を抱えている人のために、これは私がそれをした方法です:
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();
}
});