I want to make a subscription to a GraphQL server. The application is running in a NodeJS script (ie not in the webbrowser).
Here is what I currently do:
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') }
});
The resulting ouput is:
{ data: { startTaskRequested: null } }
Finished
On the GraphQL Server, I can see that the corresponding resolver is never called.
If I make the same subscription query using Apollo's Playground, the subscription works and I get the results that I expect: Apollo Playground
I bumped my head against this for many hours already and I would greatly appreciate it if someone could point me in the right direction.
Alright, meanwhile I found a fantastic github repository, which contains the answer to my question: https://github.com/hasura/nodejs-graphql-subscriptions-boilerplate
I'm still not sure why my code above is behaving in this way. If someone is able to explain that, I would appreciate it :-).
我已经使用 Apollo Client 通过 Appsync 运行订阅 - 使用 ApolloHttpLink 和 ApolloAuthLink 包,因此可用于任何基于 WS 的 graphql 订阅 - 试试这个 - https://github.com/kodehash/appsync-nodejs-apollo-client /树/主人
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.