【问题标题】:Apollo Graphql Resolver for a Nested Object用于嵌套对象的 Apollo Graphql 解析器
【发布时间】:2018-08-27 06:19:19
【问题描述】:

所以我有一个这样的类型:

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 嵌套字段。看起来应该比较简单,但是我在网上找不到例子..

【问题讨论】:

  • 请在您的问题中提供更多详细信息 - 如果某项“不起作用”,您期望什么行为以及您看到什么行为?如果抛出错误,错误是什么?此外,还不清楚第三个代码 sn-p 驻留在哪里 - 如果您包含解析器的所有代码会更好。

标签: graphql apollo-server


【解决方案1】:

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

在定义类型时,它们都应该在解析器映射中处于同一级别。 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 */ )
})

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 2017-09-14
    • 1970-01-01
    • 2018-08-25
    • 2019-11-06
    • 2019-12-21
    • 2021-06-04
    • 2017-04-15
    • 2017-01-07
    相关资源
    最近更新 更多