说我有以下架构:
type CodeName {
code: Int!
name: String!
}
type Person {
id: Int!
weapon: Weapon
hat: Hat
codeName: CodeName!
}
type Weapon {
id: Int!
type: String!
codeName: CodeName!
}
type Hat {
id: Int!
size: Int!
codeName: CodeName!
}
type Query {
Person(id: Int!): Person!
Weapon(id: Int!): Weapon!
Hat(id: Int!): Hat!
}
然后,我将像这样定义我的解析器:
const resolvers = {
Weapon: {
codeName: CodeNameResolver,
},
Hat: {
codeName: CodeNameResolver,
},
Person: {
codeName: CodeNameResolver,
weapon: WeaponResolver,
hat: HatResolver
},
Query: {
Person: PersonResolver,
Weapon: WeaponResolver,
Hat: HatResolver,
}
}
但是,每次我有一个类型为codeName: CodeNameResolver
的字段时,我都必须在代码中多次重复CodeName
。有没有一种方法可以使用全局字段解析器或类型解析器,这样我就不必这样做?
如果您的解析器功能相同,那么您将获得DRY。 GraphQL没有基于字段的类型全局指定解析器的机制。
您可能可以使用graphql-middleware完成此操作>
const codeNameMiddleware = async (resolve, root, args, context, info) => { if (info.returnType.toString() === 'CodeName!') { // resolve the field here return someValue } return resolve(root, args, context, info) }
不过,在应用这种模式时,您应保持谨慎。字段的类型仅描述其返回的数据的形状-它没有说明如何获取数据。即使您的
CodeName
字段的所有解析器现在看起来都一样,但将来可能不会如此。