【发布时间】:2020-04-27 22:31:38
【问题描述】:
我正在尝试使用以下库来使用 graphql 订阅:
graphql-subscription 在服务器端
subscription-transport-ws 在客户端
当不使用过滤机制时,一切都会顺利进行。但是当我在其中添加withFilter函数时,遇到了没有变量或上下文对象接收到过滤函数的问题。
例如我想根据组过滤数据。客户端使用以下查询请求服务器:
而在服务器端实现的方法是这样的:
this.resolvers.Subscription[subscription.name] = {
subscribe: withFilter((...params) => {console.log('subscription params: ', ...params); return this.pubsub.asyncIterator(subscription.name.toUpperCase());}, (...params) => {
console.log('filtering params: ', ...params)
return true // payload[subscription.name]._group === variables._group;
}),
};
它正在动态创建一些订阅(其动态性与此问题无关)。现在我上面制作的两个日志如下:
订阅参数:
null {} null null过滤参数:
{ message_onMessage: { text: 'test', _offline_id: '1587981902663', _status: 3, time: 1587981902713, _id: 1587981902716, _rev: 1587981902716 } } {} null null
因此,在传递给用于过滤数据的withFilter 函数的回调中,我没有变量对象和上下文对象来获取请求者_group 参数。
库的安装版本如下:
// server
"graphql": "^14.6.0",
"graphql-subscriptions": "^1.1.0",
// client
"graphql": "^15.0.0",
"graphql-tag": "^2.10.3",
"subscriptions-transport-ws": "^0.9.16"
【问题讨论】:
-
我不明白你的评论@xadm。如果这是一个问题或什么。但在这种情况下,
...params用于捕获所有参数作为调试技术。 -
尝试“正常”
(value, args, context, info)args 定义?
标签: filter graphql graphql-subscriptions