0

使用普通的 graphql 服务器,我们可以像这样定义上下文对象:

app.use('/graphql', graphqlExpress(async (req) => {
    return {
      schema,
      context: {
        app,
        params,
      }
    };
  }));

**订阅服务器**

我怎样才能为订阅服务器做同样的事情?(做混合http / websocket方法)。似乎无法从文档中找到解决方案。

new SubscriptionServer({
    execute,
    subscribe,
    schema,
    onConnect: (connectionParams, webSocket) => {
      console.log(connectionParams);
    }
  }, {
    server,
    path: '/subscriptions'
  });
4

1 回答 1

0

您可以在函数之前添加中间件,execute并在解析订阅之前添加所需的上下文。

它可能看起来像这样:

const middleware = (args) => new Promise((resolve, reject) => {
      const [schema, document, root, context, variables, operation] = args;
      
      context.app = <your app parameter>;
      context.params = <your params>;
      
      resolve(args);
});


SubscriptionServer.create({
  schema,
  subscribe,
  execute: (...args) => middleware(args).then(args => { return execute(...args); }) },
  {
    server: httpServer,
    path: "/subscription",
  },
);

如您所见,您在execute函数的 args 中拥有来自请求的所有数据。

于 2018-02-20T09:04:37.723 回答