Nestjs 服务器不为 socket.io 客户端提供服务

Nestjs server does not serve socket.io client

我有一个拆分应用程序,在服务器上使用 nestjs,在客户端使用 Angular 应用程序。使用 socket.io 设置 websockets 似乎很容易使用 @nestjs/websockets 模块,在客户端上我使用 ngx-socket-io。我用这个 repo 作为基础。现在,当我将项目的 @nestjs/websockets 依赖项更新为最新版本时,我得到

我预计会出现 CORS 问题,更新后,我可以通过添加

来修复它们
  app.enableCors({
    origin: 'http://localhost:4200',
    credentials: true,
  });

到我的 main.ts 文件,但我不知道为什么不提供客户端文件。使用 repo 的版本 (5.7.x) 既没有 CORS 错误也没有服务文件的问题。

我尝试了一些 @WebSocketGateway() 的设置,移动到不同的端口,设置 serveClient(尽管默认情况下应该是 true),但似乎没有任何效果.有什么建议吗?

谢谢

问题是 nestjs 确实将较低级别的平台(socket.ioexpressfastify、...)与 nestjs 分开了模块。 websocket模块需要安装底层平台,for socket.io

npm install --save @nestjs/platform-socket.io

要提供 socket.io 客户端文件,似乎还需要安装一个 HTTP 平台,用于 express

npm install --save @nestjs/platform-express

有关 v6 的 migration guide 中的更多信息。

以我为例 我替换了

app.useWebSocketAdapter(new WsAdapter(app));

来自

import { WsAdapter } from '@nestjs/platform-ws';

app.useWebSocketAdapter(new IoAdapter(app));

主要.ts来自

import { IoAdapter } from '@nestjs/platform-socket.io';

工作得很好!

我遇到了同样的问题。我在网络浏览器中打开应用程序的客户端,但直接从我的文件系统打开(我会双击桌面上小虚拟 fake-front-end.js 旁边的文件 index.html例如...)。似乎 CORS 问题会持续存在,直到我通过适当的服务器实际访问 index.html。所以我在后端创建了一条路由,为 index.html 和 fake-front-end.js.

提供服务

socket.io 官方文档中有一节是关于 CORS 的。 nestjs 网站上有一个部分,但两者对我的情况都没有真正帮助。