首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用“GraphQL”的NestJS GraphQL订阅

不使用“GraphQL”的NestJS GraphQL订阅
EN

Stack Overflow用户
提问于 2021-09-14 13:20:14
回答 2查看 5.4K关注 0票数 7

我正在尝试升级我们的NestJS GraphQL订阅服务器,以利用graphql-ws而不是当前的subscriptions-transport-ws (如NestJS文档所建议的)。我将NestJS版本升级到

代码语言:javascript
复制
    "@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

代码语言:javascript
复制
    GraphQLModule.forRoot({
      autoSchemaFile: true,
      sortSchema: true,
      playground: true,
      installSubscriptionHandlers: true,
      subscriptions: {
        'graphql-ws': true
      },
    }),

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

代码语言:javascript
复制
{
  "error": "Could not connect to websocket endpoint ws://localhost:8880/graphql. Please check if the endpoint url is correct."
}

在控制台里我得到:

代码语言:javascript
复制
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扩展而不是游乐场

但都没有奏效。很抱歉寄了这么长的邮筒。我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-16 13:35:10

在阿波罗服务器3发布时,GraphQL游乐场或阿波罗资源管理器还不支持GraphQL库中使用的协议。

请参阅这里

只有在通过操场与订阅交互对您没有多大用处的情况下使用graphql才是明智的,而且您可以只从您自己的客户端与订阅交互,该客户端已经设置为使用graphql。

设置您的客户端使用graphql与阿波罗。见这里

票数 11
EN

Stack Overflow用户

发布于 2022-02-21 12:01:59

这将完成以下工作:

代码语言:javascript
复制
subscriptions: {
    'graphql-ws': true,
    'subscriptions-transport-ws': true,
  },

正如在文档中提到的

提示 您还可以>同时使用两个包(订阅-transport和graphql),例如,为了实现向后兼容性。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69178586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档