在为正在处理的内容构建解析器时遇到了一些麻烦。我所做的事情与this article所建议的相似,其中我为实体中的每个字段使用单独的解析器。这是我的架构的人为设计版本:
// schema.graphql
type Query {
service: ServiceInfo
}
type ServiceInfo {
configuration: ServiceConfiguration
publicKey: PublicKey
serverTokenInfo: ServerTokenInfo
}
type ServiceConfiguration {
platformA: PlatformConfiguration
platformB: PlatformConfiguration
platformC: PlatformConfiguration
}
问题是ServiceInfo
从不同的数据源解析其每个字段,这很好。我遇到的困难是platformA,platformB和platformC都从不同的数据源解析它们的字段。
以下是我目前从事的工作的解析器:
// resolvers.js
export default {
Query: {
service: () => ({})
},
ServiceInfo: {
configuration: () => ({}),
publicKey: (_, args, ctx) => ctx.dataSources.service.getPublicKey(),
serverTokenInfo: : (_, args, ctx) => ctx.dataSources.service.getTokenInfo(),
}
}
现在,我需要为configuration
写一个解析器。我已经尝试了几件事:
// resolvers.js
export default {
// ...
ServiceInfo: {
configuration: () => ({}),
// ...
ServiceConfiguration: {
platformA: (_, args, ctx) => ctx.dataSources.service.getConfig("A"),
platformB: (_, args, ctx) => ctx.dataSources.service.getConfig("B"),
platformC: (_, args, ctx) => ctx.dataSources.service.getConfig("C"),
}
}
}
失败,并告诉我:ServiceInfo.ServiceConfiguration defined in resolvers, but not in schema
。我尝试的下一件事是将ServiceConfiguration
解析器移到顶层:
// resolvers.js
export default {
// ...
ServiceInfo: {
// ...
}
ServiceConfiguration: {
platformA: (_, args, ctx) => ctx.dataSources.service.getConfig("A"),
platformB: (_, args, ctx) => ctx.dataSources.service.getConfig("B"),
platformC: (_, args, ctx) => ctx.dataSources.service.getConfig("C"),
}
}
...现在失败了,并告诉我ServiceConfiguration defined in resolvers, but not in schema
,我没有主意了。如果有人有见识,我会真的感激不已,我很受困扰。