gpt4 book ai didi

graphql - Apollo GraphQL 服务器;设置上下文以处理由已触发订阅触发的请求

转载 作者:行者123 更新时间:2023-12-04 17:50:18 26 4
gpt4 key购买 nike

我了解如何在创建 GraphQL 服务器时设置上下文对象,例如

const app = express();
app.use(GRAPHQL_URL, graphqlExpress({
schema,
context: {
foo: 'bar'
},
}));

以便在处理传入请求时将上下文对象传递到我的解析器。

但是,当解析器被订阅触发时,我没有看到这个上下文对象(即客户端订阅 GraphQL 订阅,并定义订阅触发时要发送给它们的数据的形状);在这种情况下,上下文似乎是一个空对象。

在 PubSub.publish() 调用之后调用解析器时,有没有办法确保正确设置我的上下文对象?

最佳答案

我猜你正在使用包 subscription-transport-ws。在这种情况下,可以在不同的执行步骤中添加上下文值。参见 API .两种可能的情况

  1. 如果您有某种身份验证。您可以在 onConnect 执行步骤的上下文中添加查看器。这是在第一次连接到 websocket 时完成的,并且在连接关闭并再次打开之前不会改变。参见 example .

  2. 如果您想更动态地添加上下文,您可以在执行步骤之前添加一种中间件。它可能如下所示:

const middleware = (args) => new Promise((resolve, reject) => {
const [schema, document, root, context, variables, operation] = args;
context.foo = "bar"; // add something to context
resolve(args);
})

subscriptionServer = SubscriptionServer.create({
schema: executable.schema,
subscribe,
execute: (...args) => middleware(args).then(args => {
return execute(...args);
})
}, {
server: websocketServer,
path: "/graphql",
}, );

关于graphql - Apollo GraphQL 服务器;设置上下文以处理由已触发订阅触发的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45574592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com