【问题标题】:How to let GraphQL know if I want to resolve a field from another rootQuery?如何让 GraphQL 知道我是否想从另一个 rootQuery 解析字段?
【发布时间】:2020-02-29 16:58:10
【问题描述】:

让我解释一下:

type SecondType {
  id: String
}

type FirstType {
  id: String
  secondTypes: [SecondType]
}

type Query {
  firstTypes: [FirstType]
  secondTypes: [SecondType]
}
//
const resolver = {
  Query: {
    firstTypes: fetchFirstTypes,
    secondTypes: fetchSecondTypes
  }
};

想法是,如果firstTypesecondType之间存在父子关系,例如secondType包含它的父(firstType)id,通过前面解析器的结果,secondTypes里面查询firstTypes 可以获取与其父firstType 相关的secondTypes。我所经历的是firstType 的解析器正在从fetchFirstTypes 的结果中寻找一个名为secondTypes 的键。但我想让 GraphQL 知道它需要从 Query.secondTypes 的解析器解析 secondTypes。我怎样才能做到这一点?也许有办法编写一个字段的“后备减速器”?所以如果它没有从结果中找到一个键,它可以寻找一个解析器?

【问题讨论】:

    标签: javascript graphql


    【解决方案1】:

    根据我对您问题的理解,您需要一个解析器来解析 FirstType 中存在的关键 secondTypes。为了这, 您可以按如下方式制作解析器:

    const resolver = {
      Query: {
        firstTypes: fetchFirstTypes,
        secondTypes: fetchSecondTypes
      },
      FirstType: {
          secondTypes: (parent, args, context, info) => {
              // Here you will get the parent id(FirstType) parent.id
              // From Here resolve the secondtypes data
          }
      }
    };
    

    【讨论】:

    • 我明白了,但不幸的是它对我不起作用。所以 FirstType 最初从解析器返回的值中没有字段 secondTypes - fetchFirstTypes,我想手动添加 secondTypes。这还有可能吗?
    • 通常上述解决方案应该有效。在 fetchFirstTypes 中手动添加 SecondTypes 也可以。您应该返回与提到的类型中存在的字段匹配的对象
    • 目前我使用的是 express-graphql,我无法在 Query 中定义我的根查询解析器,解析器函数参数也不同。在上面的示例中,我只能在 reducer 对象的第一级定义我的根查询,如果我在 Query 中传递它们,它会抛出不能为不可为空的字段返回 null。自从我提出这个问题以来,我整天都在尝试不同的事情,除了我使用的包之外,没有任何理由可以说明它对我不起作用。 - 即使这个流行的包不能做到这一点会令人惊讶
    • 这可能会有所帮助:softchris.github.io/pages/…
    猜你喜欢
    • 2016-10-14
    • 2021-04-19
    • 2017-05-26
    • 2017-05-10
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 2021-07-03
    相关资源
    最近更新 更多