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