node.js - NodeJS + Express Cors + SocketIO = XMLHttpRequest 错误
问题描述
我用nodejs创建了一个简单的应用程序来测试socketIO,我在我网站的一个子域上运行了服务器,而客户端(在ReactJS中)在另一个子域上。
我的服务器总是向我发送著名的错误:
从源“https://”访问“https:///socket.io/?EIO=3&transport=polling&t=MyFav6q”的 XMLHttpRequest 已被 CORS 策略阻止:没有“Access-Control-Allow-Origin”标头出现在请求的资源上。
我尝试了超过 10 种解决方案,但它们不起作用,我不知道这里有什么问题。
应用程序.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);
});
}
解决方案
在服务器上设置origins
属性。io
io.origins('*')
默认情况下,任何情况下都允许:
Sets the allowed origins value. Defaults to any origins being allowed. If no arguments are supplied this method returns the current value.
You can also passo a validation function
推荐阅读
- google-apps-script - 如何更新吐司文本而不是绘制新吐司
- reactjs - 使用 redux-observable 和 rxjs 6 获取新的访问令牌并重试操作?
- apache-spark - 在 pyspark 中读取镶木地板文件时 where 子句中的动态列
- r - 根据通过混淆变量调整的连续变量预测疾病概率
- azure - 将一些属性从 azure alerts 发送到 slack
- excel - .NullString 属性在输出中将“-”显示为 0 的问题
- postgresql-9.6 - Postgres - 至少获得 2 个计数
- mysql - 找出每个站点访问过至少两个不同国家的唯一用户数
- windows - 如何在 Docker 内运行的 Windows 上配置代理服务器?
- java - 将 wav 文件放入由帧集合组成的 ArrayList