Akh*_*mar 10 node.js cors socket.io
我的节点服务器和客户端在不同的端口上运行(分别为3001,5347).在客户端我用过,
var socket = io('http://127.0.0.1:3001');
Run Code Online (Sandbox Code Playgroud)
在服务器上,我逐一尝试了以下所有内容
1) io.set('origins', '*:*');
2) io.set('origins', 'http://127.0.0.1:5347');
3) io.set('origins', '*');
4) io.set('origins', '127.0.0.1:5347');
Run Code Online (Sandbox Code Playgroud)
但是我得到了以下错误:
XMLHttpRequest无法加载http://127.0.0.1:3001/socket.io/?EIO=3&transport=polling&t=1456799439856-4590.当credentials标志为true时,不能在'Access-Control-Allow-Origin'标头中使用通配符'*'.因此不允许原点'null'访问.
注意:我在服务器上使用express,我已经按照以下方式使用cors中间件:
app.use(cors());
Run Code Online (Sandbox Code Playgroud)
app和cors分别是express和cors的实例.
Shr*_*ran 37
接受的答案已过时
根据官方文档,您可以将其添加到现有的 http 服务器 https://socket.io/docs/server-initialization/#Attached-to-an-existing-HTTP-server
const server = require('http').createServer();
const options = { /* ... */ };
const io = require('socket.io')(server, options);
io.on('connection', socket => { /* ... */ });
server.listen(3000);
Run Code Online (Sandbox Code Playgroud)
使用此选项对象启用 cors 似乎可以解决问题
options={
cors:true,
origins:["http://127.0.0.1:5347"],
}
Run Code Online (Sandbox Code Playgroud)
Akh*_*mar 27
如果运行Express如下:
var app = express();
var server = app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
所以要启动socket.io,我们可以这样做:
var io = require('socket.io').listen(server);
Run Code Online (Sandbox Code Playgroud)
问题是因为以下代码:
var http = require('http').Server(app);
var io = require('socket.io')(http);
Run Code Online (Sandbox Code Playgroud)
传递给socket.io的服务器对象与我正在侦听的服务器对象不同.
| 归档时间: |
|
| 查看次数: |
11252 次 |
| 最近记录: |