我有一个使用apollo-server-express
的graphql服务器。以下是基本graphql请求响应模式的代码。
const server = new ApolloServer({
typeDefs,
resolvers,
context: async ({ connection }) => {
if (connection) {
return {
...connection.context,
};
}
return null;
},
});
server.applyMiddleware({ app, path: '/graphql' });
工作正常。您可以看到它使用applyMiddleware
来使用Express Server。我可以在http://localhost:8080/graphql
网址上打开graphiql并从那里进行测试。后来我在代码中添加了订阅支持:
const { SubscriptionServer } = require('subscriptions-transport-ws');
const { createServer } = require('http');
const ws = createServer(app);
SubscriptionServer.create({...}, {
server: ws,
path: '/subscriptions',
});
完成此操作后,我的应用程序功能可以正常运行,但无法在graphiql
操场上对其进行测试。它抱怨订阅URL始终是http://localhost:8080/graphql
而不是http://localhost:8080/subscriptions
?
我发现有人说要使用此代码:
app.use(‘/graphiql’, graphiqlExpress({
endpointURL: ‘/graphql’,
subscriptionsEndpoint: `ws://localhost:3000/subscriptions`,
}));
但是我的应用程序正在使用applyMiddleware
。我不知道如何使它适合我的情况。
答案 0 :(得分:0)
您的GraphQL Playground端点的选项将传递到ApolloServer构造函数,如in the docs所示。
const server = new ApolloServer({
playground: {
subscriptionEndpoint: 'your custom subscription endpoint',
// other GraphQL Playground options
},
...
});
可用的选项显示为here。