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

时间:2019-05-04 18:46:22

标签: nestjs

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

  • CORS错误和
  • 客户端无法加载socket.io客户端js文件的错误 http://localhost:3000/socket.io/?EIO=3&transport=polling&t=Mg48H4P

我期望CORS问题,并且在更新后,我可以通过添加

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

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

我尝试了@WebSocketGateway()的几个设置,移到另一个端口,设置了serveClient(即使默认情况下应该为true),但似乎没有任何效果。有什么建议吗?

谢谢

3 个答案:

答案 0 :(得分:1)

就我而言 我替换了

app.useWebSocketAdapter(new WsAdapter(app));

来自

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

使用

app.useWebSocketAdapter(new IoAdapter(app));

主要.ts中的

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

像魅力一样工作!

答案 1 :(得分:0)

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

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

要提供socket.io客户端文件,似乎还需要安装HTTP平台以进行快递

npm install --save @nestjs/platform-express

v6的migration guide中的更多信息。

答案 2 :(得分:0)

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

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