首页 > 解决方案 > GraphQL 将输入参数传递给订阅

问题描述

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

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

这是 阿波罗订阅参考页面

基本上我正在尝试这个简单的订阅 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'),
    }
}

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

非常感谢您的帮助

标签: node.jsgraphqlapollosubscriptionapollo-server

解决方案


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

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

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


推荐阅读