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

编译NestJS项目时WebSocket出现类型错误,求解决方案

问题

按照NestJS官方文档编写WebSocket网关代码,实现如下:

events.gateway.ts

import {
  MessageBody,
  SubscribeMessage,
  WebSocketGateway,
  WebSocketServer,
} from "@nestjs/websockets";
import { Server } from "socket.io";

@WebSocketGateway({
  cors: {
    origin: "http://localhost:3000",
  },
})
export class EventsGateway {
  @WebSocketServer()
  server: Server;

  @SubscribeMessage("events")
  handleEvent(@MessageBody() data: string): string {
    return data;
  }
}

events.module.ts

import { Module } from "@nestjs/common";
import { EventsGateway } from "./events.gateway";

@Module({
  providers: [EventsGateway],
})
export class EventsModule {}

将EventsModule导入app.module.ts后,编译项目时出现错误:

TypeError: this.graphInspector.insertEntrypointDefinition is not a function
    at /home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/web-sockets-controller.js:108:33
    at Array.forEach (<anonymous>)
    at WebSocketsController.inspectEntrypointDefinitions (/home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/web-sockets-controller.js:106:25)
    at WebSocketsController.subscribeToServerEvents (/home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/web-sockets-controller.js:39:14)
    at WebSocketsController.connectGatewayToServer (/home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/web-sockets-controller.js:30:14)
    at SocketModule.connectGatewayToServer (/home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/socket-module.js:47:35)
    at /home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/socket-module.js:36:38
    at IteratorWithOperators.forEach (/home/Desktop/New Folder/nest_try_1/node_modules/iterare/lib/iterate.js:157:13)
    at SocketModule.connectAllGateways (/home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/socket-module.js:36:14)
    at /home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/socket-module.js:31:61

Node.js v19.4.0

严格遵循文档编写仍持续出现该错误,请求排查解决。

解决方案

这个错误的核心原因是NestJS核心包与WebSocket包版本不兼容:graphInspector是NestJS核心模块的API,当@nestjs/websockets版本高于@nestjs/core时,会调用核心包中不存在的方法,触发报错。

具体解决步骤

  1. 检查版本一致性:打开package.json,确认所有@nestjs/*开头的包版本完全一致(大版本、小版本均需匹配,比如v8.x.x或v9.x.x全统一)。
  2. 卸载不兼容依赖:
    npm uninstall @nestjs/core @nestjs/common @nestjs/websockets @nestjs/platform-socket.io
    
  3. 重新安装统一版本依赖(以NestJS v9为例,可根据需求替换为v8或v10):
    npm install @nestjs/core@^9 @nestjs/common@^9 @nestjs/websockets@^9 @nestjs/platform-socket.io@^9
    
  4. 清理缓存并重构项目:
    rm -rf node_modules package-lock.json
    npm install
    npm run build
    

额外注意事项

  • 禁止混合使用不同大版本的NestJS包,大版本间存在API变更,极易引发兼容性问题。
  • 推荐通过NestJS CLI创建WebSocket模块(nest g gateway events),CLI会自动安装匹配版本的依赖,避免手动安装导致的版本不一致。

内容的提问来源于stack exchange,提问作者James Jeramiah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:50:37