似乎我的服務器是根據Apollo文檔http://dev.apollodata.com/tools/apollo-server/setup.html設置的。在我的服務器/ main.js文件:使用subscriptions-transport-ws設置Apollo服務器?
//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
它打印出「GraphQL現在服務器上運行http://localhost:8080/graphql」到終端日誌表明服務器已成功初始化。
但在我的main_layout組件的頂部,當我運行這段代碼:
import { Client } from 'subscriptions-transport-ws';
const wsClient = new Client('ws://localhost:8080');
...我得到這個控制檯消息:
WebSocket連接到「WS://本地主機:8080 /'失敗:連接在收到握手響應之前關閉
我在想什麼?
你GitHunt-API/API/index.js突出的代碼,不引用的架構,阿波羅文檔說的模式必須設置服務器引用。模式在第66行高亮顯示的代碼上方引用,但這是針對不同端口上的偵聽器,它似乎主要關注GitHub API。說我需要修改端口3010代碼以省略對GitHub的引用是否正確? – VikR
如果您想要設置訂閱(因爲它們現在是正確的),您需要一個將提供給SubscriptionManager構造函數的架構對象(我已經在我的答案的最後一部分中指出了這一點),並且在此過程中會從'subscriptions-transport-ws'包提供給Server類。上面的參考文獻涉及僅用於突變和查詢的GraphQL POST端點。完成所有這些配置後,您將在兩個不同的端口上留下兩臺服務器,一臺用於GraphQL端點,一臺用於WebSocket將事件推送到客戶端。 – davidyaha
不需要專用的websocket端口 - 請參閱我的答案。 – antirealm