如何在使用buildSchema时访问字段解析器内的父解析器的值?

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

当我们使用graphqlHTTP时,传递给resolve方法的第一个参数实际上是客户端查询而不是root传递的参数,这对查询解析器来说很好。但是对于一个用于字段解析器需要知道父级值的用例,如何实现这一点?

type Person {
    name: String,
    cityId: String,
    city: City,
}

在上面的场景中,我希望city将成为一个字段解析器,并且它需要访问cityId,它是父类型的属性。我认为这应该作为参数传递给字段解析器,但事实并非如此。有没有办法实现这个目标?

我看到使用对象声明schema时可以完成相同的操作,在这种情况下,传递给解析器函数的firs值是root。

graphql graphql-js express-graphql
1个回答
2
投票

简短的回答:don't use buildSchema

通过根值传递解析函数仅起作用,因为它依赖于默认的解析程序行为,并且它仅适用于根级别字段。不幸的是,如果你使用buildSchema,提供解析器的唯一方法是通过root值。

你的选择是:

  1. 以编程方式构建模式,而不是使用模式定义语言(SDL)。这将允许您为模式中的任何字段指定resolve函数,并且该resolve函数将获取所有四个参数(父值,参数,上下文和信息)。你可以在check out the docs举个例子。
  2. 在SDL中编写模式,但使用makeExecutableSchema中的graphql-tools生成GraphQLSchema实例。 makeExecutableSchema允许您无痛地为任何字段注入旋转变压器,并提供许多其他功能。有关如何以这种方式生成模式的更多信息可以在here找到。
  3. express-graphql转移到apollo-server,它在引擎盖下使用makeExecutableSchema并提供express-graphql没有的许多额外功能。 Check the docs如何开始。
© www.soinside.com 2019 - 2024. All rights reserved.