订阅的 GraphQLObjectType

Posted

技术标签:

【中文标题】订阅的 GraphQLObjectType【英文标题】:GraphQLObjectType for subscriptions 【发布时间】:2020-09-23 13:48:19 【问题描述】:

我使用 Express 实现了一个 GraphQL 服务器,但我在设置 GraphQL 订阅类型时遇到了问题。

我正在开发一个实时聊天应用程序,并尝试在创建新消息后发布事件,但我不明白如何为订阅创建 GraphQLObjectType。

我尝试使用“graphql-subscriptions”中的 PubSub 和 WithFilter,但我不知道该怎么做。

const pubsub = new PubSub();
const NEW_MESSAGE = 'NEW_MESSAGE';

const Subscription = new GraphQLObjectType(
  name: 'Subscription',
  fields: () => (
    newMessage: 
      subscribe: withFilter(() => pubsub.asyncIterator(NEW_MESSAGE), (payload, args) => 
        return payload.recipientId === args.recipientId;
      ),
      **type: ?**
    
  )
);

这是我创建的 MessageType:

const MessageType = new GraphQLObjectType(
      name: 'Message',
      fields: () => (
        id:  type: GraphQLID ,
        message:  type: GraphQLString ,
        senderId:  type: GraphQLID ,
        recipientId:  type: GraphQLID 
      )
    );

还有 sendMessage 突变:

const Mutation = new GraphQLObjectType(
      name: 'Mutation',
      fields: () => (
        sendMessage: 
          type: MessageType,
          args: 
            message:  type: GraphQLString ,
            senderId:  type: GraphQLID ,
            recipientId:  type: GraphQLID 
          ,
          resolve: (parent, args) => 
            const  message, senderId, recipientId  = args;
            const msg = new Message( message, senderId, recipientId );

            pubsub.publish(NEW_MESSAGE, 
              recipientId,
              newMessage: message
            );

            return msg.save();
          
        
      )
    );

【问题讨论】:

【参考方案1】:

我使用订阅的方式是创建订阅服务器并在客户端订阅它。看看这个你就明白了。 https://youtu.be/r5KY5m5OXsI

【讨论】:

请保留答案字段以获得完整的信息解决方案。如果您有参考链接,请直接在您的答案中发布该链接中的相关信息。请注意,链接可能会过时。 @Ronald 我知道,但它是 YouTube 视频的链接,所以我发布了它。

以上是关于订阅的 GraphQLObjectType的主要内容,如果未能解决你的问题,请参考以下文章

EventBus手写实现事件通信框架 ( 订阅类-订阅方法缓存集合 | 事件类型-订阅者集合 | 订阅对象-事件类型集合 )

取消 iOS 订阅

ReactiveCocoa 冷热订阅(cold subscribe, hot subscribe)

订阅号如何获取?

EventBus发布-订阅模式 ( 使用代码实现发布-订阅模式 )

在我当前订阅结束之前升级到更高的订阅时,订阅如何工作?