Socket.io, NodeJS dan ReactJS CORS error

Oct 06 2020

Sebagai permulaan, saya telah membaca banyak pertanyaan tentang masalah yang sama.

Ketika saya membuka koneksi dengan soket melalui klien React dengan cara biasa, hanya URL sebagai parameter, saya tidak mendapatkan kesalahan ini, koneksi dibuat.

Tetapi ketika saya melakukan ini:

const io = ioClient(webSocketUrl, {
  transportOptions: {
    polling: {
      extraHeaders: getAuthenticationToken()
    }
  }
});

Permintaan tersebut mengembalikan kesalahan CORS setiap saat.

Saya telah mencoba untuk:

  • Atur asalnya seperti ini: io.origins(['*:*']);

  • app.use (fungsi (req, res, berikutnya) {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 ();}) ;

  • Dan juga ini:

    app.use (cors ()); app.options ("*", cors ());

Tak satu pun di atas berhasil.

Saya sangat menghargai bantuan apa pun.

Jawaban

Rodolfo Oct 07 2020 at 12:37

Temukan jawabannya!

Untuk siapa pun dengan masalah yang sama, berikut cara saya melakukannya:

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