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

NestJS WebSocket初始化失败,客户端连接报错求助

问题分析与解决步骤

1. 修复依赖版本不兼容问题

你的@nestjs/core是9.x版本,但@nestjs/platform-socket.io使用了10.x版本,NestJS核心包与附属包版本必须保持一致,否则会出现初始化异常(比如afterInit方法不执行)。

执行以下命令降级Socket.IO相关包到匹配9.x的版本:

npm install @nestjs/platform-socket.io@^9.0.0 socket.io@^4.6.0

2. 修正WebSocket客户端连接方式

NestJS的@nestjs/platform-socket.io基于Socket.IO实现,并非原生WebSocket协议,不能直接用new WebSocket()连接,必须使用Socket.IO客户端。

修改测试HTML页面如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WebSocket Test</title>
  <!-- 引入Socket.IO客户端CDN -->
  <script src="https://cdn.socket.io/4.6.0/socket.io.min.js"></script>
</head>
<body>
  <h1>WebSocket Test</h1>
  <script>
    // 连接Socket.IO服务器,指定端口和命名空间
    const socket = io('http://localhost:4040/chat');

    socket.on('connect', () => {
      console.log('Socket.IO connection established');
      // 发送消息到服务器的newMessage事件
      socket.emit('newMessage', { message: 'Hello Server!' });
    });

    socket.on('message', (data) => {
      console.log('Message from server:', data);
    });

    socket.on('disconnect', () => {
      console.log('Socket.IO connection closed');
    });

    socket.on('connect_error', (error) => {
      console.error('Socket.IO connection error:', error);
    });
  </script>
</body>
</html>

3. 完善网关配置(可选但推荐)

如果需要使用/chat命名空间,需在网关装饰器中明确配置,同时添加CORS支持避免跨域问题:

修改chat.gateway.ts的@WebSocketGateway装饰器:

@WebSocketGateway(4040, {
  namespace: 'chat', // 指定命名空间为/chat
  cors: {
    origin: '*', // 开发环境允许所有来源,生产环境请指定具体域名
    credentials: true,
  },
})

4. 验证修复效果

重新启动应用:

npm run start:dev

此时控制台应该会打印WebSocket server initialized,打开测试页面后,控制台会显示连接成功的日志,并且能收到服务器返回的消息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:25:53