Socket.io连接后端(localhost:5001)出现404错误求助
问题原因与解决办法
核心错误:服务器启动对象错误
你创建了http.Server实例(const server = http.createServer(app))并把Socket.IO绑定到了这个server上,但最后启动服务器时用的是app.listen()。Express的app.listen()会创建一个全新的HTTP服务器,和你之前绑定Socket.IO的server不是同一个实例,导致Socket.IO的服务根本没在你指定的端口上运行,前端连接时自然返回404。
修复步骤
把后端启动服务器的代码从app.listen()改成server.listen():
修改后的数据库连接成功后的启动代码:
mongoose.connect(process.env.MONGO_URI) .then(() => { // 用server.listen代替app.listen server.listen(process.env.PORT, () => { console.log('listening on port', process.env.PORT); }); }) .catch((err) => { console.log(err); });
额外验证点
- 确认
process.env.PORT的值确实是5001,可以在启动前打印该变量,避免端口配置不符。 - 前端Socket.IO连接地址
http://localhost:5001/配置正确,无需修改。 - 你的CORS配置(Express的
cors中间件和Socket.IO自身的CORS设置)均无问题,保持原样即可。
修复后重启后端服务器,前端就能正常建立Socket.IO连接了。
内容的提问来源于stack exchange,提问作者tan shi yu
相关产品推荐
相关产品推荐

