Я использую метеор и пытаюсь заставить подписки Apollo работать, но я получаю
WebSocket connection to 'ws://127.0.0.1:3000/sockjs/401/m892wugm/websocket' failed: Connection closed before receiving a handshake response
в клиенте.
Я следовал руководству apollographql.com для Конфигурация сервера и Конфигурация клиента , но я пока не совсем уверен, как подключить клиента к серверу.
В клиенте я использую ApolloClient и ApolloLink для передачи Метеор аутентификации в GraphQL.
Вот код:
Клиент
import { ApolloClient } from 'apollo-client'
import { createHttpLink } from 'apollo-link-http'
import { InMemoryCache } from 'apollo-cache-inmemory'
import { ApolloLink } from 'apollo-link'
const httpLink = new createHttpLink()
const authLink = new ApolloLink((operation, forward) => {
operation.setContext(() => ({
headers: { 'meteor-login-token': Accounts._storedLoginToken() },
}))
return forward(operation)
})
export default ApolloClient = new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache(),
})
Сервер
createApolloServer({
schema,
tracing: true,
cacheControl: true,
})
new SubscriptionServer({
schema,
execute,
subscribe,
}, {
server: WebApp.httpServer,
path: '/subscriptions',
})
Package.json (не все, конечно)
Meteor 1.6.1.1
...
"apollo-client": "^2.2.5",
"apollo-link": "^1.2.1",
"apollo-link-context": "^1.0.7",
"apollo-link-http": "^1.5.3",
"apollo-link-ws": "^1.0.8",
"subscriptions-transport-ws": "^0.9.9",
...
Я прочиталгде-то, что передача noServer : true для SubscriptionServer () разрешает конфликт.Ошибка действительно исчезает, но подписка, похоже, тоже не работает.
И да, я следовал руководству Meteor Integration от apollographql, но информация там устарела ине работает.