我正在研究一个项目,该项目将网关服务中的多个远程模式组合在一起,并从这些模式扩展类型。这是通过mergeSchemas
中的graphql-tools
实现的,我们在其中指定了所需的片段和自定义解析器以委托给相关架构。此实现的一部分是:
const typeExtensions = `
extend type VsStatistics {
commonCompetitors(filter: DateRangeFilter): [Player!]!
}
`
const mergedSchema = mergeSchemas({
schemas: [ playerSchema, resultsSchema, typeExtensions ],
resolvers: {
VsStatistics: {
commonCompetitors: {
fragment: `fragment CommonCompetitorsFragment on VsStatistics { commonCompetitorIds }`,
resolve (parent, _args, context, info) {
return info.mergeInfo.delegateToSchema({
schema: playerSchema,
operation: 'query',
fieldName: 'players',
args: { idArray: parent.commonCompetitorIds },
context,
info
})
}
}
}
}
})
commonCompetitorIds是VsStatistics对象上可用的ID数组。如上所示,当我不需要将任何参数传递给片段时,此方法可以很好地工作,但是此后我向DateRangeFilter
添加了类型为commonCompetitorIds
的过滤器参数。 commonCompetitors
类型扩展名将此过滤器作为参数,我需要以某种方式将其传递给片段,以便将过滤器应用于commonCompetitorIds
。
我尝试了以下方法...
commonCompetitors: {
fragment: `fragment CommonCompetitorsFragment on VsStatistics { commonCompetitorIds(filter: $filter) }`
...
...希望该片段的父母参数可以自动使用,但是我得到一个错误,提示Variable "$filter" is not defined
。我如何才能将此过滤器传递到片段中,以获取经过过滤的commonCompetitorIds
,然后将其用于解析器?
答案 0 :(得分:0)
这里的GraphQL工具仓库中有一个关于此主题的新讨论:https://github.com/ardatan/graphql-tools/discussions/1709。简而言之,在v6.0.15中添加了支持该功能的基本功能。
原始答案:
我通过设置两个来规避此问题 我的字段解析器中有
delegateToSchema
个请求。第一个 使用可变参数获取普通ID,第二个则获取 执行标准记录拼接。此解决方案小于 之所以理想,是因为它添加了一个额外的ID请求,该请求将 将拼接请求与其他批处理不同步 该服务。希望我们可以在中获得本机GraphQL工具支持 未来。