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

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,提问作者콩이야안돼

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:15:07