graphql - 订阅的 GraphQLObjectType
问题描述
我使用 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();
}
}
})
});
解决方案
我使用订阅的方式是创建订阅服务器并在客户端订阅它。看看这个你就明白了。 https://youtu.be/r5KY5m5OXsI
推荐阅读
- android - 单击recyclerview中的按钮时,如何在recyclerview中的viewpager中更改relativelayout的可见性
- linux - 是否可以在我的 jail.conf 中使用 maxretry 0?
- php - 在 Heroku 中集成 PHPMailer
- html - 并排响应的两个 iframe 视频
- machine-learning - 可以而且应该将“class_weight”和“balanced_accuracy_score”一起用于不平衡数据吗?
- javascript - React - 每个变量的状态与必要的状态
- azure - Azure webapp 诊断工具 - 可用性报告
- c# - 如何使用脚本启动另一个脚本
- python - 使用 pyinstaller 打包 matplotlib 时出现问题 - PyQt5.QtX11Extras 模块未找到错误
- tensorflow - TensorFlow 中实现的 Luong Attention 的第二种形式是什么?