【问题标题】:GraphQL passing input arguments to subscriptionsGraphQL 将输入参数传递给订阅
【发布时间】:2020-08-12 10:48:09
【问题描述】:

我正在尝试将 ID 等输入参数传递给 GQL 订阅。 我正在与:

const { PubSub } =require ('apollo-server');

这是apollo subscription reference page

基本上我正在尝试使用这个简单的订阅 typedef:

 type Subscription{
  subscribe_device(id: String!): device}

这是我的订阅解析器:

Subscription:{
    subscribe_device:(parent, args, context, info) =>{
        console.log(args)
        subscribe: () => pubsub.asyncIterator('stream')
    }
}

实际上没有输入参数它工作得很好,但在这种情况下它似乎与 asyncIterator 有问题

没有输入参数:

Subscription:{
    subscribe_device:{
        subscribe: () => pubsub.asyncIterator('stream'),
    }
}

有人知道如何解决这个问题吗?如何在订阅中输入一些参数? 我需要它来动态创建不同的“流”

非常感谢您的帮助

【问题讨论】:

  • 是的,我已经按照文档中的报告使用 withFilter 进行了尝试,但问题是它只允许检查某些内容。例如,我可以检查我的 ID。我的意图是先创建由作为输入参数传递的设备 ID 标识的单独流,而不是检查我是否应该接收它。
  • 你知道有没有可能?

标签: node.js graphql apollo subscription apollo-server


【解决方案1】:

我认为您正在寻找的是额外的中间件(位于 documentation 中),您可以在其中完成获取和返回之间的操作

此外,如果您想使用withFilters 功能,您可以对每个可能的情况进行一般计算,并过滤variables 输入的所需结果并检查payload。例如,只有那些要求特定结果的人才会收到有关套接字更改的通知。

【讨论】:

    【解决方案2】:

    如果您需要根据参数对频道进行描述,您只需使用args 根据它创建频道名称。例如:

    Subscription:{
      subscribeDevice: {
        subscribe: (_parent, args, _context, _info) => { 
          const { someId } = args;
          return pubsub.asyncIterator([`stream_${someId}`])
        }
      }
    }
    

    这种方法适用于我使用apollo-server@2.19.0

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 2013-12-11
      • 2019-12-08
      • 2017-09-27
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      相关资源
      最近更新 更多