我正在编写一个graphql订阅服务器。如果我编写查询,则将解析程序嵌套在另一个之中是没有问题的,因此查询看起来像这样:
query {
messages {
privateMessage {
id
message
userId
}
}
}
因此,首先执行messages
解析器,然后执行privateMessage
解析器。
我想知道是否可以实现相同的订阅结构,所以它看起来像这样:
subscription {
messages {
privateMessage {
id
message
userId
}
}
}
编辑:
这是我当前拥有的根订阅模式:
const RootSubscriptions = new GraphQLObjectType({
name: 'RootSubscriptions',
fields: {
privateMessage: {
type: PrivateMessage.type,
resolve: PrivateMessage.resolve,
subscribe: PrivateMessage.subscribe,
},
flaggedMessage: {
type: FlaggedMessage.type,
resolve: FlaggedMessage.resolve,
subscribe: FlaggedMessage.subscribe,
},
teamMessage: {
type: TeamMessage.type,
resolve: TeamMessage.resolve,
subscribe: TeamMessage.subscribe,
},
},
})
我希望它看起来像这样:
const RootSubscriptions = new GraphQLObjectType({
name: 'RootSubscriptions',
fields: {
messages: {
type: new GraphQLObjectType({
name: 'MessagesSubType',
fields: {
privateMessage: {
type: PrivateMessage.type,
resolve: PrivateMessage.resolve,
subscribe: PrivateMessage.subscribe,
},
flaggedMessage: {
type: FlaggedMessage.type,
resolve: FlaggedMessage.resolve,
subscribe: FlaggedMessage.subscribe,
},
teamMessage: {
type: TeamMessage.type,
resolve: TeamMessage.resolve,
subscribe: TeamMessage.subscribe,
},
}
})
}
},
})
编辑结束
问题是我让messages
订阅函数运行但没有让privateMessage
订阅函数运行。很想知道是否有可能以及如何实现它。
由于我是用node.js编写的,因此我会欣赏js中的示例,但是任何指向解决方案的指针都将有所帮助。
预先感谢!
答案 0 :(得分:1)
基于我对graphQl订阅工作方式的理解,嵌套订阅可能不怎么幸运。我没有找到支持该文档的支持文档,但是在我自己的实验中,我没有发现此文档有效。 在这种情况下,我建议您有一个消息根订阅,该订阅需要使用推荐类型的参数,在这种情况下,该枚举可以是私有消息,标记消息或团队消息。 您可以使用切换案例来确定订阅并做出相应的反应。