GraphQLObjectType для подписок

Я реализовал сервер GraphQL с помощью Express, и у меня возникла проблема с настройкой типа подписки GraphQL.

Я разрабатываю приложение для чата в реальном времени и пытаюсь опубликовать событие после создания нового сообщения, но не понимаю, как мне создать GraphQLObjectType для подписки.

Я пробовал использовать PubSub и WithFilter из "graphql-subscriptions", но не могу понять, как это сделать.

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

Другие вопросы по тегам