Node.js运行报TypeError: Cannot read property 'on' of undefined问题求助
问题原因及解决方案
错误原因
报错TypeError: Cannot read property 'on' of undefined指向io.socket.on这行代码,本质是你访问的io.socket对象不存在,为undefined,通常由两个问题导致:
- socket.io实例未完成正确初始化,你在实例创建前就调用了相关监听方法
- API调用格式错误,socket.io服务端监听客户端连接的标准写法是直接调用
io.on('connection', callback),不需要额外加.socket层级,你写错了调用路径。
解决方法
第一步:确认依赖安装
首先确保你已经在项目中安装了socket.io依赖:npm install socket.io
第二步:修正初始化和监听代码
以常用的Express搭配socket.io的场景为例,完整的正确写法如下:
const express = require('express'); const http = require('http'); const { Server } = require('socket.io'); const app = express(); const server = http.createServer(app); // 初始化socket.io实例,如有跨域需求可配置cors参数 const io = new Server(server, { cors: { origin: "*" } }); // 修正监听写法,删除多余的.socket层级 io.on('connection', function(socket){ console.log('用户接入成功') socket.on('send', function(data){ console.log('收到的消息: ', data.msg) }) socket.on('disconnect', function(){ console.log('连接断开') }) }) // 注意要使用server实例监听端口,不能用app.listen server.listen(3000, () => { console.log('服务已启动,端口3000') })
如果使用的是socket.io v2.x旧版本,初始化写法可以简化为:
const express = require('express'); const app = express(); const server = require('http').createServer(app); const io = require('socket.io')(server); // 后续监听逻辑和上面一致,直接用io.on('connection')
内容的提问来源于stack exchange,提问作者콩이야안돼
相关产品推荐
相关产品推荐

