GraphQL-全局字段解析器

问题描述 投票:1回答:1

说我有以下架构:

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。有没有一种方法可以使用全局字段解析器或​​类型解析器,这样我就不必这样做?

javascript graphql apollo-server
1个回答
0
投票

如果您的解析器功能相同,那么您将获得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字段的所有解析器现在看起来都一样,但将来可能不会如此。

© www.soinside.com 2019 - 2024. All rights reserved.