同样的错误
@Kenzku @thEpisode您使用的是哪个版本的 socket.io?
它应该在2.x
(包括 https://github.com/socketio/engine.io/pull/452)中修复。
嗨@darrachequesne感谢您的回复。 我是 Crawler Site (https://www.crawlersite.com) 的创建者,我们使用 Socket.io 将数据发送到我们的服务器,我们所有的基础设施都在 Microsoft Azure 上,所有测试和第一个 beta 测试人员都使用 Azure,我们还没有没有问题,但是一个新的 betatester 使用了另一个云服务提供商,他报告了一个错误。 问题是 CORS,我们在 Google 上阅读了所有问题!! 并搜索解决方案,我们注意到 Socket.io 已更新为 2.0(服务器中正好是 2.0.1),我们更新了客户端和服务器但问题仍然存在,我们使用 Express 也报告了 CORS 的问题并解决了它。
我们非常沮丧,因为 Google 上的所有解决方案都没有解决问题,很抱歉没有在 GitHub 问题或 StackOverflow 上发布此问题,但我们想提供所有可能解决问题的详细信息。 一些要测试的网址:
后端 URI: http :
测试 Express CORS: https :
测试 Socket.io CORS: https ://testcrawlersite.000webhostapp.com(请查看控制台)
我们要测试的主要站点: http :
Socket.io 文件: http ://crawlerbackend.azurewebsites.net/socket.io.js
我们的 app.js 的一部分:
`
var path = require('path');
var bodyParser = require('body-parser');
var cors = require('cors');
var express = require('express');
var app = express();
// use body parser so we can get info from POST and/or URL parameters
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.use(bodyParser.json()); // support json encoded bodies
app.use(cors({ origin: '*' }));
// Settings for CORS
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.header('Access-Control-Allow-Origin', '*');
// Request methods you wish to allow
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.header('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', false);
// Pass to next layer of middleware
next();
});
var server = app.listen(cross.NormalizePort(process.env.PORT || 3500));
var io = require('socket.io').listen(server, {
log: false,
agent: false,
origins: '*:*',
transports: ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling', 'polling']
});
`
伟大的! 我想我们现在可以关闭问题了。
@thEpisode我意识到这是一个旧线程,但最后一个链接为我修复了它! 大多数 Express 教程都有app.listen(...)
但在使用socket.io
的情况下,您需要确保在index.js
调用http.listen(...)
而不是听app
对象,否则您会遇到此 CORS 问题。 这么小的事情!
@frewinchristopher我遵循与你上面提到的相同的模式,在本地它工作正常,但在远程它会抛出(原因:CORS 请求没有成功)。 我错在哪里..?
@gowthamyaal你能告诉我们你的代码吗?
感谢您的关注,但解决了 CORS 问题,因为我使用 AWS 时弹性 ip 和本地 ip 存在冲突,后来我将套接字侦听 ip 更改为 0.0.0.0,这解决了我的问题。
我已经遵循了我能找到的所有解决方案,但仍然没有发送有效的回复。 如果有人可以看看,我会非常感激。
`const express = require('express')
const http = require('http')
const socketIO = require('socket.io')
const cors = require('cors')
// 主机端口
常量端口 = 3001
const app = express()
app.use(cors())
// 服务器实例
const server = http.createServer(app)
// 使用服务器实例创建套接字
const io = socketIO(服务器)
io.origins("http://localhost:3000")
io.on('连接', 套接字 => {
console.log("用户已连接")
socket.on('disconnect', () => {
console.log("User Disconnected")
})
socket.on('send message', (message) => {
io.sockets.emit('send message', message)
})
})
server.listen(port, () => console.log( Listening on port ${port}
))`
最有用的评论
@thEpisode我意识到这是一个旧线程,但最后一个链接为我修复了它! 大多数 Express 教程都有
app.listen(...)
但在使用socket.io
的情况下,您需要确保在index.js
调用http.listen(...)
而不是听app
对象,否则您会遇到此 CORS 问题。 这么小的事情!