【问题标题】:Graphql subscription does not catch client-side variablesGraphql 订阅不会捕获客户端变量
【发布时间】: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


【解决方案1】:

我已经放弃使用变量,因为我发现我可以发送查询和变异请求等参数。所以我更改了请求,现在它可以进行如下查询:

而且服务器在订阅的类型定义中也接受该参数。现在withFilter过滤函数(第二个回调)的输入参数是有效载荷和变量,它们分别是突变发布的数据和从订阅者检索的数据。

所以现在有了上面的请求,当前的功能就完美了:

        this.resolvers.Subscription[subscription.name] = {
            subscribe: withFilter(_ => this.pubsub.asyncIterator(subscription.name.toUpperCase()), (payload, variables) => {
                console.log(payload, variables);
                return payload[subscription.name]._group === variables._group;
            }),
        };

虽然我没有弄清楚如何使用请求中发送的变量,但我的问题得到了解决。

【讨论】:

  • ...但它不包括最终的安全检查(所有者与登录用户相比 - 上下文)?
猜你喜欢
  • 2021-07-28
  • 2023-04-03
  • 2022-12-12
  • 2023-01-31
  • 2020-03-21
  • 2019-07-19
  • 2018-12-10
  • 1970-01-01
  • 2019-01-18
相关资源
最近更新 更多