【问题标题】:Nestjs server does not serve socket.io clientNestjs 服务器不为 socket.io 客户端提供服务
【发布时间】:2019-09-22 22:36:39
【问题描述】:

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

  • CORS 错误和
  • 客户端无法加载socket.io客户端js文件的错误

我预计 CORS 会出现问题,更新后,我可以通过添加来修复它们

  app.enableCors({
    origin: 'http://localhost:4200',
    credentials: true,
  });

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

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

谢谢

【问题讨论】:

    标签: nestjs


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      就我而言 我换了

      app.useWebSocketAdapter(new WsAdapter(app));
      

      来自

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

      app.useWebSocketAdapter(new IoAdapter(app));
      

      主要来自.ts

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

      工作就像一个魅力!

      【讨论】:

        【解决方案3】:

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

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

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

        npm install --save @nestjs/platform-express

        更多信息请参阅migration guide for v6。

        【讨论】:

          猜你喜欢
          • 2021-03-18
          • 2012-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-27
          • 1970-01-01
          • 2011-08-18
          • 2020-04-07
          相关资源
          最近更新 更多