用于嵌套对象的Apollo Graphql解析器

时间:2018-03-18 16:29:34

标签: graphql apollo-server

所以我有这样的类型:

type CardStatus {
  status: String
  lastUpdated: String
}

type CardCompany {
  cardStatus: CardStatus
}

type ExternalAccounting {
  cardCompany: CardCompany
}

type User {
  balance: String
  externalAccounting: ExternalAccounting
}

我的解析器看起来像这样

const User = {
  balance: (root, args, context) => getBalance().then((res)=>res)
  cardStatus: (??)
}

我想使用解析器在用户对象中设置嵌套的cardStatus字段。

Balance是对象的直接字段,很容易 - 我只需运行一个解析器并返回结果以获得平衡。我想为深度嵌套的cardStatus字段运行cardStatus api调用,但我不知道如何执行此操作。我在我的解析器中试过这样的东西:

  const User = {
    balance: {...}
    externalAccounting: {
      cardCompany: {
        cardStatus: (root) => { (...) },
      },
    },
  }

但它不起作用,因为它没有设置用户对象的cardStatus嵌套字段。似乎它应该相对容易但我在网上找不到一个例子..

1 个答案:

答案 0 :(得分:3)

您应该在cardStatus类型下定义CardCompany解析器。

定义类型时,它们应该在解析器映射中处于同一级别。 Apollo将根据每个嵌套字段的类型来解析查询的嵌套字段。

所以你的代码应该是这样的:

const User = {
  balance: (root, args, context) => getBalance().then((res)=>res)
}

const CardCompany = {
  cardStatus: (root) => { (...) },
}

我不确定它是如何连接到您的可执行架构的,但它应该类似于:

const schema = makeExecutableSchema({
  typeDefs,
  resolvers: merge(User, CardCompany, /* ... more resolvers */ )
})