Wygląda na to, że mam skonfigurowany serwer zgodnie z dokumentacją Apollo pod numerem http://dev.apollodata.com/tools/apollo-server/setup.html. W moim serwerze pliku/main.js:Konfigurowanie serwera Apollo z subskrypcjami-transport-ws?
//SET UP APOLLO INCLUDING APOLLO PUBSUB
const executableSchema = makeExecutableSchema({
typeDefs: Schema,
resolvers: Resolvers,
connectors: Connectors,
logger: console,
});
const GRAPHQL_PORT = 8080;
const graphQLServer = express();
// `context` must be an object and can't be undefined when using connectors
graphQLServer.use('/graphql', bodyParser.json(), apolloExpress({
schema: executableSchema,
context: {}, //at least(!) an empty object
}));
graphQLServer.use('/graphiql', graphiqlExpress({
endpointURL: '/graphql',
}));
graphQLServer.listen(GRAPHQL_PORT,() => console.log(
`GraphQL Server is now running on http://localhost:${GRAPHQL_PORT}/graphql`
));
//SET UP APOLLO INCLUDING APOLLO PUBSUB
wypisze „GraphQL Server jest teraz działa na http://localhost:8080/graphql” do terminala dzienniku wskazujący, że serwer został pomyślnie zainicjowany.
Ale na szczycie mojej składnika main_layout, kiedy uruchomić ten kod:
import { Client } from 'subscriptions-transport-ws';
const wsClient = new Client('ws://localhost:8080');
... I ten komunikat konsoli:
websocket połączenie „WS: // localhost : 8080/"nie powiodło się: połączenie zostało zamknięte przed odebraniem odpowiedzi na potwierdzenie uścisku dłoni
Czego mi brakuje?
Kod wyróżnić w GitHunt-API/API/index.js, nie odwoływać się do schematu, a docs Apollo powiedzieć schemat musi być uwzględniona w konfiguracji serwera. Schemat jest przywoływany powyżej podświetlonego kodu, w linii 66, ale dotyczy słuchacza na innym porcie, który wydaje się być w większości zainteresowany interfejsem API GitHub. Czy słusznie byłoby powiedzieć, że muszę zmodyfikować kod portu 3010, aby pominąć odwołania do GitHub? – VikR
Jeśli chcesz skonfigurować subskrypcje (tak jak są teraz) potrzebujesz obiektu schematu, który zostanie przekazany do konstruktora SubscriptionManager (który wskazałem w ostatniej części mojej odpowiedzi) i że, w jego należy podać klasę Server z pakietu 'subscriptions-transport-ws'. Powyższy odnośnik odnosi się do punktu końcowego POST GraphQL, który obsługuje tylko mutacje i zapytania. Po tej konfiguracji pozostałyby dwa serwery na różnych portach, jeden dla punktu końcowego GraphQL, a drugi dla websocket do przesyłania zdarzeń do klienta. – davidyaha
Dedykowany port websocket nie jest wymagany - zobacz moją odpowiedź. – antirealm