NestJS WebSocketGateway 未初始化

Posted

技术标签:

【中文标题】NestJS WebSocketGateway 未初始化【英文标题】:NestJS WebSocketGateway does not initialize 【发布时间】:2019-09-04 00:40:57 【问题描述】:

根据 NestJS 文档,我已经实现了 websockets 网关,并在 AppModule 中提供了它。服务器正常启动,我可以通过 http 成功提供静态资产。但是我根本无法运行 websockets,ws 服务器在ws://localhost:3333 不可用,afterInit 函数根本没有执行。即使在我定义 @SubscribeMessage 时也没有。

网关实现为

@WebSocketGateway()
export class SocketGateway implements OnGatewayInit 
  afterInit() 
    console.log('Gateway initialized');
  

AppModule 正确提供网关

@Module(
  providers: [SocketGateway]
)
export class AppModule 

这是引导实现

export async function bootstrap() 
  let app = await NestFactory.create(AppModule);

  await app.listen(process.env.port || 3333, () => 
    console.log(`Listening at http://localhost:$port`);
  );


bootstrap();

我的依赖是

"socket.io-client": "^2.2.0",
"@nestjs/common": "5.5.0",
"@nestjs/core": "5.5.0",
"@nestjs/platform-socket.io": "^6.1.0",
"@nestjs/websockets": "^6.1.0"

也许你直接看到了问题。感谢您的帮助,干杯!

【问题讨论】:

您正在混合使用nest v5 和nest v6。不保证不同的主要版本可以正常互操作。请将所有嵌套依赖项更新到 v6,请参阅 docs.nestjs.com/migration-guide 这会正确启动网关 :) 它是一个 nrwl/nx 工作区,包括 5.5.0 deps。通过安装 6.1.0 的 npm 添加额外的包。 【参考方案1】:

在您的项目中,nest 的主要版本 v5 和 v6 是混合的。不保证不同的主要版本可以正常互操作。将所有依赖项更新为嵌套 v6;您可以查看migration guide,了解有关更新的更多信息。

运行$ npm i @nestjs/core@latest @nestjs/common@latest


当您安装新的依赖项时,请注意来自 npm 的对等依赖项警告,如下所示:

npm WARN @nestjs/websockets@6.1.0 requires a peer of @nestjs/common@^6.0.0 but none is installed.
You must install peer dependencies yourself.

【讨论】:

以上是关于NestJS WebSocketGateway 未初始化的主要内容,如果未能解决你的问题,请参考以下文章

Chrome v88+ 和 Nestjs 服务器上的 socket-io 连接出现 CORS 错误

Nest.js WebSocket

如何使用 nestjs 和 socket.io 创建房间

NestJs套接字身份验证,在handleConnection中发出事件

NestJs Websocket,如何测试和调试“Socket hang up”?

NestJS:无法读取未定义的属性“'createObjectLiteralExpression'”