Node.js NodeJS+;快递Cors+;SocketIO=XMLHttpRequest错误
我用nodejs创建了一个简单的应用程序来测试socketIO,我在我的网站上的一个子域上运行了服务器,客户端(在ReactJS中)在另一个子域上 我的服务器总是向我发送著名的错误: 访问位于的XMLHttpRequest 'https:///socket.io/?EIO=3&transport=polling&t=MyFav6q' 来自来源的“https://”已被CORS策略阻止:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源 我尝试了10多种解决方案,但都不管用,我不知道这里有什么问题 app.jsNode.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多种解
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和端口的是我的主机。但在那之后,拥有一个能工作的人真是太幸运了(一天后,它无缘无故地工作了)