【问题标题】:Socket.io , NodeJS and ReactJS CORS errorSocket.io、NodeJS 和 ReactJS CORS 错误
【发布时间】:2021-01-21 17:27:00
【问题描述】:

作为初学者,我已经阅读了很多关于同一问题的问题。

当我通过 React 客户端以正常方式打开与套接字的连接时,只是 URL 作为参数,我没有收到此错误,连接建立。

但是当我这样做时:

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

请求每次都返回一个 CORS 错误。

我已经尝试过:

  • 像这样设置原点:io.origins(['*:*']);

  • app.use(function (req, res, next) { res.setHeader( “访问控制允许来源”, req.header("原点") || req.header("x-forwarded-host") || req.header("referer") || req.header("主机") ); res.header( “访问控制允许方法”, “获取、发布、选项、放置、修补、删除” ); res.header("Access-Control-Allow-Headers", "X-Requested-With,content-type"); res.setHeader("Access-Control-Allow-Credentials", false); 下一个(); });

  • 还有这个:

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

以上都不起作用。

我将不胜感激。

【问题讨论】:

  • getAuthenticationToken 返回什么?
  • 它返回对象:{ Authorization: "Bearer ..." } 但我找到了解决方法!谢谢!

标签: javascript node.js reactjs socket.io


【解决方案1】:

找到答案了!

对于任何有同样问题的人,我就是这样做的:

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

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 2019-11-09
    • 1970-01-01
    • 2021-03-17
    • 2018-06-26
    • 2018-06-29
    • 2021-05-09
    • 2013-07-18
    • 2020-03-13
    相关资源
    最近更新 更多