Socket.io、NodeJS、ReactJSCORSエラー

Oct 06 2020

手始めに、私は同じ問題に関するたくさんの質問を読みました。

通常の方法で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());

上記のどれもうまくいきませんでした。

助けていただければ幸いです。

回答

Rodolfo Oct 07 2020 at 12:37

答えが見つかりました!

同じ問題を抱えている人のために、これは私がそれをした方法です:

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();
  }
});