Node.js NodeJS+;快递Cors+;SocketIO=XMLHttpRequest错误

Node.js NodeJS+;快递Cors+;SocketIO=XMLHttpRequest错误,node.js,reactjs,express,socket.io,cors,Node.js,Reactjs,Express,Socket.io,Cors,我用nodejs创建了一个简单的应用程序来测试socketIO,我在我的网站上的一个子域上运行了服务器,客户端(在ReactJS中)在另一个子域上 我的服务器总是向我发送著名的错误: 访问位于的XMLHttpRequest 'https:///socket.io/?EIO=3&transport=polling&t=MyFav6q' 来自来源的“https://”已被CORS策略阻止:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源 我尝试了10多种解

我用nodejs创建了一个简单的应用程序来测试socketIO,我在我的网站上的一个子域上运行了服务器,客户端(在ReactJS中)在另一个子域上

我的服务器总是向我发送著名的错误:

访问位于的XMLHttpRequest 'https:///socket.io/?EIO=3&transport=polling&t=MyFav6q' 来自来源的“https://”已被CORS策略阻止:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源

我尝试了10多种解决方案,但都不管用,我不知道这里有什么问题

app.js

const cors = require("cors");
const app = require("express")();
app.use(cors());
const server = require('http').createServer(app);
const io = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
    socket.emit('message', 'Vous êtes bien connecté !');

    socket.on('message', function (message) {
        console.log(socket.pseudo + ' me dit: ' + message);
        socket.broadcast.emit('message', socket.pseudo + " dit: "+message);
    });

    socket.on("pseudo", pseudo => {
        socket.pseudo = pseudo;
        socket.broadcast.emit('message', socket.pseudo + " s'est connecté !");
    });

    socket.on("reset-draw", data => {
        socket.broadcast.emit('reset-draw', socket.pseudo + " a reset le dessin !");
    });

    socket.on("draw-rect", data => {
        console.log(data);
        socket.broadcast.emit('draw-rect', data);
    });
});

server.listen(8100);
socketIO部件上的客户端:

import socketIOClient from "socket.io-client";

[...]

componentDidMount() {
        this._context = this.refs.canvas.getContext('2d');

        const socket = socketIOClient("https://<ServerURL>");
        socket.emit('pseudo', "testing_guy");
        socket.on("reset-draw", data => {
            this._context.clearRect(0, 0, 500, 500);
            console.log(data);
        });

        socket.on("draw-rect", data => {
            this.drawRect(data);
        });
    }
从“socket.io客户端”导入socketIOClient;
[...]
componentDidMount(){
this._context=this.refs.canvas.getContext('2d');
const socket=socketIOClient(“https://”);
emit('pseudo','testing_guy');
socket.on(“重置绘图”,数据=>{
这个.u context.clearRect(0,0500500);
控制台日志(数据);
});
socket.on(“draw rect”,数据=>{
这个.drawRect(数据);
});
}

将服务器上的
源属性设置为
io

io.origins('*')
在任何情况下,默认情况下都允许:

设置允许的原点值。默认为允许的任何来源。 如果未提供任何参数,此方法将返回当前值


您也可以通过验证

我需要使用主机服务器发送的IP和端口,之后我尝试了很多方法,但仅在一天后有效。

这是否回答了您的问题?您可以为您的用例配置
cors()
中间件。我已经尝试添加cors模块,这可能是因为您没有为您的环境正确配置它。e、 g.
cors({credentials:true,origin:true})
该代码没有问题,您可能有其他东西阻止了它,可能是代理,或者您没有显示相关部分。因为默认情况下socket.io允许来自任何域的流量。经过大量测试,需要指定特定ip和端口的是我的主机。但在那之后,拥有一个能工作的人真是太幸运了(一天后,它无缘无故地工作了)