如何在 graphql 中订阅动态主题?
How can I subscribe a dynamic topic in graphql?
我在 nodejs 中有一个 graphql 订阅,如下所示:
const resolvers = {
Query: () => { ... },
Mutation: () => { ... },
Subscription: {
commentAdded: {
subscribe: withFilter(
() => pubsub.asyncIterator('COMMENT_ADDED'),
(payload, variables) => {
return payload.commentAdded.repository_name === variables.repoFullName;
},
),
}
},
};
您可以看到此订阅使用的主题是 COMMENT_ADDED
,这是一个硬编码字符串。我想知道我是否可以根据用户请求创建一个动态主题名称。
类似于下面的代码。它以 payload.id
作为后缀订阅主题。我如何在 apollo 服务器中执行此操作?
subscribe: withFilter(
(payload) => pubsub.asyncIterator('COMMENT_ADDED:'+payload.id),
(payload, variables) => {
return payload.commentAdded.repository_name === variables.repoFullName;
},
),
传递给 withFilter
的第一个函数是 subscribe
函数,它决定了有效载荷的值。所以它不能作为参数传递有效载荷。该函数传递了四个参数,与任何根解析器相同——根值、字段的参数、上下文和 GraphQLResolveInfo 对象。
我在 nodejs 中有一个 graphql 订阅,如下所示:
const resolvers = {
Query: () => { ... },
Mutation: () => { ... },
Subscription: {
commentAdded: {
subscribe: withFilter(
() => pubsub.asyncIterator('COMMENT_ADDED'),
(payload, variables) => {
return payload.commentAdded.repository_name === variables.repoFullName;
},
),
}
},
};
您可以看到此订阅使用的主题是 COMMENT_ADDED
,这是一个硬编码字符串。我想知道我是否可以根据用户请求创建一个动态主题名称。
类似于下面的代码。它以 payload.id
作为后缀订阅主题。我如何在 apollo 服务器中执行此操作?
subscribe: withFilter(
(payload) => pubsub.asyncIterator('COMMENT_ADDED:'+payload.id),
(payload, variables) => {
return payload.commentAdded.repository_name === variables.repoFullName;
},
),
传递给 withFilter
的第一个函数是 subscribe
函数,它决定了有效载荷的值。所以它不能作为参数传递有效载荷。该函数传递了四个参数,与任何根解析器相同——根值、字段的参数、上下文和 GraphQLResolveInfo 对象。