订阅URL在Apollo Graphql订阅服务器中不起作用

时间:2019-11-29 03:04:05

标签: node.js graphql apollo

我有一个使用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。我不知道如何使它适合我的情况。

1 个答案:

答案 0 :(得分:0)

您的GraphQL Playground端点的选项将传递到ApolloServer构造函数,如in the docs所示。

const server = new ApolloServer({
  playground: {
    subscriptionEndpoint: 'your custom subscription endpoint',
    // other GraphQL Playground options
  },
  ...
});

可用的选项显示为here