Node.js服务端socket.io的connection事件不触发问题排查
错误定位与修复
你的代码共有2处问题,其中直接导致connection事件不触发的是前端客户端初始化错误:
第一处(核心错误):
main.js中的Socket.IO客户端初始化变量名错误
你在chat.html中引入的/socket.io/socket.io.js是运行在浏览器端的客户端脚本,它会在浏览器全局作用域挂载名为io的构造方法,不存在后端Node环境里定义的io_l变量。这行代码执行时会直接抛出引用错误,根本没有发起WebSocket连接请求,后端自然不会触发连接回调。
错误代码:// public/js/main.js 错误写法 const socket = io_l();修复为:
// public/js/main.js 正确写法 const socket = io();第二处(逻辑隐患):
server.js中端口取值顺序写反
你当前写的var PORT = 3000 || process.env.PORT;因为3000是真值,会永远固定使用3000端口,环境变量中配置的端口不会生效,属于逻辑写法错误。
错误代码:// server.js 错误写法 var PORT = 3000 || process.env.PORT;修复为:
// server.js 正确写法 const PORT = process.env.PORT || 3000;
修复完成后重启服务,刷新浏览器页面,后端终端就会正常输出New websocket connection!的连接日志。
排查提示:遇到前端连接类问题优先打开浏览器开发者工具的Console面板,JS运行时的报错会直接定位问题原因。
内容的提问来源于stack exchange,提问作者Aquarius_Girl
相关产品推荐
相关产品推荐

