You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Socket.IO连接故障:HTML前端无法连接5858端口的Node.js后端

Socket.IO连接失败问题排查与解决

我正在尝试将带.php扩展名的HTML前端与运行在5858端口的Node.js后端通过Socket.IO建立连接,处理前端的socket.on事件,但始终无法成功建立连接。虽然已经在Socket.IO配置中添加了CORS设置,还是出现连接报错。

Node.js后端代码

const express = require('express');
const app = express();

const connectdb = require('./db/connect.js');
const port = process.env.PORT || 5858
const DATABASE_URL = "mongodb://localhost:27017";
const server = require('http').createServer(app);

const io = require('socket.io')(server , {
  cors: {
    origin: false,
    withCredentials: false
  }
}).listen(server);

//connection to database
connectdb(DATABASE_URL);

//  apply to all requests
app.use(cors())
app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
  });
// app.use(express.limit('50M'));
app.use(bodyParser.json())  //Body Parser MiddleWare
app.use(express.json())

io.on('connection', (socket) => {
    console.log("new connection")
    socket.on('otpnumberevent', (data) => {
        console.log(data);
        let invid = data.id
           
invoicesModel.findOneAndUpdate(
  invid,
    data,   
  {
    "fields" : {"otpverified" : 1},
   "new": true 
  }
).exec((err , doc) =>{
            console.log(doc)
            if (err) {
                let response = {
                  message: "Failed",
                  doc: err
                }
                io.emit('messageSent', response)
              }
              else {
                let response = {
                  message: "Success",
                  doc: doc
                }
                
                io.emit('getotpresponse', response)
              }
    
            });
       
    });
  });

app.get('/' , (req , res) => {
    res.send("Welcome to Dma backend");
});

server.listen(port, () => {
  console.log('Server listening at port %d', port);
});

前端代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.4/socket.io.js" integrity="sha512-YeeA/Qxn5hYdkukScTCNNOhTrv1C2RubAGButJ1rmgQwZf/HdRaCGl+JAVkqsqaNRaYNHdheiuKKuPf9mDcqKg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

var socket = io('http://localhost:5858', { transports: ['websocket', 'polling', 'flashsocket'] }); //socket connection code, my nodejs server is running on 5858 port
socket.on('getotpresponse' , (data) =>{
    console.log(data);
    if(data.doc.otpverified == "Yes"){
        swal({
            title: "Success!",
            text: "Otp verification Successfull",
            icon: "success",
            button: "Okay!",
        }).then(function() {
            location.reload(true);
        });
    }else{
        swal({
            title: "Failed!",
            text: "OTP verification failed!",
            icon: "error",
            button: "Okay!",
        });
    }
})

报错截图

连接报错截图


问题排查与解决方案

1. 修复Socket.IO CORS配置错误

当前origin: false的设置会拒绝所有跨域请求,需修改为允许前端来源:

const io = require('socket.io')(server , {
  cors: {
    origin: "http://localhost", // 前端运行地址,开发环境可临时用"*"
    methods: ["GET", "POST"],
    withCredentials: true
  }
});

同时删除.listen(server),因为server已传入Socket.IO构造函数,后续server.listen(port)会启动服务。

2. 消除重复CORS设置冲突

后端同时使用app.use(cors())和自定义res.header中间件,会导致响应头重复。建议保留cors包配置:

const cors = require('cors');
app.use(cors({
  origin: "http://localhost",
  credentials: true
}));

删除自定义的res.header中间件。

3. 确保客户端与服务端版本兼容

前端使用Socket.IO 4.5.4,后端需安装对应版本:

npm install socket.io@4.5.4

4. 优化前端连接配置

去掉冗余的transports设置,Socket.IO会自动选择最优传输方式:

var socket = io('http://localhost:5858');

同时修正前端代码末尾多余的})语法错误。

5. 补充缺失的依赖引入

后端代码使用了cors和body-parser但未引入,需添加:

const cors = require('cors');
const bodyParser = require('body-parser');

执行npm install cors body-parser安装依赖。

6. 验证服务端启动状态

访问http://localhost:5858,确认能看到"Welcome to Dma backend",确保服务正常运行。

内容的提问来源于stack exchange,提问作者Smitty's

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:40:28