Как сделать подписку GraphQL в NodeJS через Apollo Client? - PullRequest
0 голосов
/ 11 марта 2020

Я хочу оформить подписку на сервер 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 я вижу, что соответствующий распознаватель никогда не вызывается.

Если я выполняю тот же запрос подписки, используя игровую площадку Apollo, подписка работает, и я получаю ожидаемые результаты: Детская площадка Аполлона

Я уже много часов бьюсь об это головой, и я был бы очень признателен, если бы кто-то мог указать мне правильное направление.

1 Ответ

0 голосов
/ 12 марта 2020

Хорошо, тем временем я нашел хранилище fantasti c github, в котором содержится ответ на мой вопрос: https://github.com/hasura/nodejs-graphql-subscriptions-boilerplate

Я до сих пор не уверен, почему мой код выше ведя себя таким образом. Если кто-то сможет это объяснить, я был бы признателен: -).

...