如何通过Apollo客户端在NodeJS中进行GraphQL订阅?

6

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

以下是我目前的做法:

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服务器上,我发现对应的解析器从未被调用。

如果我使用Apollo Playground进行相同的订阅查询,则订阅将起作用,并且我会得到预期的结果: Apollo Playground

我已经把头撞了很多个小时,如果有人能指点我正确的方向,我将非常感激。

2个回答

4

我遇到了同样的问题。我尝试使用推荐的graphql-ws https://github.com/enisdenjo/graphql-ws,在“Node中的客户端用法”中查看,但套接字会关闭并显示错误1002。接下来,我将尝试使用您提供的链接中的软件包,尽管它被标记为“不再维护”。 - Jesper Kristiansen

1

感谢提供这个代码库,它真的帮了大忙。 - Gaurav Shukla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接