Es scheint, als ob ich meinen Server gemäß der Apollo-Dokumentation unter http://dev.apollodata.com/tools/apollo-server/setup.html eingerichtet habe. In meinem Server/main.js Datei:Apollo Server mit Subscriptions-Transport-ws einrichten?
//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
Es druckt zum Terminal log "GraphQL Server jetzt auf http://localhost:8080/graphql läuft" anzeigt, dass der Server erfolgreich initialisiert wurde.
Aber an der Spitze meiner main_layout Komponente, wenn ich diesen Code ausführen:
import { Client } from 'subscriptions-transport-ws';
const wsClient = new Client('ws://localhost:8080');
... ich diese Konsole Meldung:
WebSocket-Verbindung zu ‚ws: // localhost : 8080/'fehlgeschlagen: Verbindung wurde vor dem Empfang einer Handshake-Antwort geschlossen
Was fehlt mir?
Der Code, den Sie markieren in GitHunt-API/api/index.js, verweist nicht auf das Schema und die Apollo docs sagen, dass das Schema muss den Server bei der Einrichtung verwiesen werden. Das Schema wird über dem markierten Code in Zeile 66 referenziert, aber das ist für einen Listener an einem anderen Port, der hauptsächlich mit der GitHub-API zu tun hat. Wäre es richtig zu sagen, dass ich den Port 3010-Code ändern muss, um Referenzen auf GitHub wegzulassen? – VikR
Wenn Sie die Subskriptionen einrichten möchten (wie sie gerade sind), benötigen Sie ein Schema-Objekt, das dem SubscriptionManager-Konstruktor (auf den ich im letzten Teil meiner Antwort hingewiesen habe) gegeben wird und der dann dazu kommt aus dem Paket "subscriptions-transport-ws" an die Server-Klasse übergeben werden. Die obige Referenz bezieht sich auf den GraphQL POST-Endpunkt, der nur Mutationen und Abfragen bedient. Nach dieser Konfiguration verbleiben zwei Server an verschiedenen Ports, einer für den GraphQL-Endpunkt und einer für den Websocket, um Ereignisse an den Client zu senden. – davidyaha
Ein dedizierter Websocket-Port ist nicht erforderlich - siehe meine Antwort. – antirealm