【问题标题】:How do I make GraphQL subscriptions in NodeJS via Apollo Client?如何通过 Apollo Client 在 NodeJS 中订阅 GraphQL?
【发布时间】:2020-06-23 16:39:26
【问题描述】:

我想订阅 GraphQL 服务器。应用程序在 NodeJS 脚本中运行(即不在网络浏览器中)。

这是我目前所做的:

const fetch = require("node-fetch").default;
const apollo = require("apollo-boost");
const ApolloClient = apollo.default;
const { gql } = require("apollo-server");

const apolloClient = new ApolloClient({
  uri: "http://localhost:4000/graphql",
  fetch
});

apolloClient.subscribe({
  query: gql`
    subscription {
      startTaskRequested {
        pkRobot
        taskName
      }
    }
  `,
}).subscribe({
  next(x) { console.log(x) },
  error(err) { console.log(`Finished with error: ${ err }`) },
  complete() { console.log('Finished') }
});

结果输出是:

{ data: { startTaskRequested: null } }
Finished

在 GraphQL Server 上,我可以看到从未调用过相应的解析器。

如果我使用 Apollo 的 Playground 进行相同的订阅查询,则订阅有效并且我得到了我期望的结果:Apollo Playground

我已经为此纠结了好几个小时,如果有人能指出我正确的方向,我将不胜感激。

【问题讨论】:

    标签: node.js graphql apollo apollo-client graphql-subscriptions


    【解决方案1】:

    好的,同时我发现了一个很棒的 github 存储库,其中包含我的问题的答案:https://github.com/hasura/nodejs-graphql-subscriptions-boilerplate

    我仍然不确定为什么上面的代码会以这种方式运行。如果有人能够解释这一点,我将不胜感激:-)。

    【讨论】:

      【解决方案2】:

      我使用 Apollo Client 运行 Appsync 订阅 - 使用 ApolloHttpLink 和 ApolloAuthLink 包,因此可用于任何基于 WS 的 graphql 订阅 - 试试这个 - https://github.com/kodehash/appsync-nodejs-apollo-client/tree/master

      【讨论】:

        猜你喜欢
        • 2019-10-17
        • 2017-09-19
        • 2020-10-08
        • 2022-12-12
        • 2020-01-05
        • 2020-08-03
        • 2020-07-07
        • 2017-09-01
        • 2022-12-12
        相关资源
        最近更新 更多