【问题标题】:NestJS GraphQL subscriptions not working with `graphql-ws`NestJS GraphQL 订阅不适用于`graphql-ws`
【发布时间】:2021-11-09 16:26:36
【问题描述】:

我正在尝试升级我们的 NestJS GraphQL 订阅服务器以使用 graphql-ws 而不是当前的 subscriptions-transport-ws(正如 NestJS documentation 所建议的那样)。 我将 NestJS 版本升级为

    "@nestjs/core": "^8.0.6",
    "@nestjs/graphql": "^9.0.4",
    "@nestjs/platform-express": "^8.0.6",
    "graphql": "^15.5.3",
    "graphql-tools": "^8.2.0",
    "apollo-server-express": "^3.3.0",

之后,我将subscriptions 选项添加到App.Module

    GraphQLModule.forRoot({
      autoSchemaFile: true,
      sortSchema: true,
      playground: true,
      installSubscriptionHandlers: true,
      subscriptions: {
        'graphql-ws': true
      },
    }),

但是,当我(在操场上)订阅以前有效的订阅时,我得到:

{
  "error": "Could not connect to websocket endpoint ws://localhost:8880/graphql. Please check if the endpoint url is correct."
}

在控制台中我得到:

WebSocket protocol error occured. It was most likely caused due to an unsupported subprotocol "graphql-ws" requested by the client. graphql-ws implements exclusively the "graphql-transport-ws" subprotocol, please make sure that the client implements it too.

我尝试过的事情:

  • 添加graphql-ws
  • 再次升级 NestJS 版本
  • 从配置中删除 installSubscriptionHandlers 选项
  • 设置graphql-ws 配置而不是传递true
  • 使用 WebSocket Test Client Google Chrome 扩展程序而不是 Playground

但没有一个有效。对不起,很长的帖子。我该如何解决这个问题?

【问题讨论】:

    标签: graphql nestjs graphql-subscriptions


    【解决方案1】:

    在 Apollo Server 3 发布时,GraphQL Playground 或 Apollo Explorer 尚不支持 graphql-ws 库中使用的协议。

    here

    只有在通过 Playground 与订阅进行交互对您没有多大用处并且您可以仅从您自己的已设置为使用 graphql-ws 的客户端与订阅进行交互时,才建议使用 graphql-ws。

    设置您的客户端以将 graphql-ws 与 Apollo 一起使用。见here

    【讨论】:

    • 哦,那真是令人失望。那么谷歌浏览器扩展也因为同样的原因失败了?
    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 2020-11-14
    • 2019-08-31
    • 2021-04-13
    • 2023-03-23
    • 2020-11-17
    • 2017-09-19
    • 2019-12-02
    相关资源
    最近更新 更多