首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Graphql订阅不捕获客户端变量。

Graphql订阅不捕获客户端变量。
EN

Stack Overflow用户
提问于 2020-04-27 10:31:54
回答 1查看 775关注 0票数 0

我试图使用以下库使用graphql订阅:

服务器端的graphql-订阅

客户端的订阅-传输-ws

当不使用过滤机制时,每件事都是正确的。但是,当我将withFilter函数添加到其中时,会遇到一个问题,即筛选函数中没有任何变量或上下文对象接收到它。

例如,我想根据组过滤数据。客户端使用以下查询请求服务器:

在服务器端,实现的方法如下:

代码语言:javascript
复制
        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;
            }),
        };

它动态地创建一些订阅(它的动态性与此问题无关)。现在,我上面所做的两条日志如下:

订阅params:null {} null null 过滤参数:{ message_onMessage: { text: 'test', _offline_id: '1587981902663', _status: 3, time: 1587981902713, _id: 1587981902716, _rev: 1587981902716 } } {} null null

因此,在传递给用于筛选数据的withFilter函数的回调中,我没有变量对象和上下文对象来获取请求者_group参数。

库的安装版本如下所示:

代码语言:javascript
复制
// 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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-27 14:31:38

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

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

因此,根据上述要求,当前的功能工作非常完善:

代码语言:javascript
复制
        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;
            }),
        };

虽然我不知道如何使用在请求中发送的变量,但我的问题得到了解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61456825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档