使用buldSchema时如何访问字段解析器中父解析器的值?

时间:2019-02-20 18:10:01

标签: graphql graphql-js express-graphql

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

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

在上述情况下,我想在哪里city是一个字段解析器,并且它需要访问cityId,这是父类型的属性。我认为这应该作为参数传递给字段解析器,但事实并非如此。 有没有办法做到这一点?

使用对象声明架构时,可以看到相同的情况,在这种情况下,传递给解析器函数的firs值为root。

1 个答案:

答案 0 :(得分:1)

简答:don't use buildSchema

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

您的选择是:

  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了解入门方法。