当我们使用graphqlHTTP时,传递给resolve方法的第一个参数实际上是客户端查询而不是root传递的参数,这对于查询解析器来说很好。但是对于一个需要字段解析器知道父级值的用例,如何实现呢?
type Person {
name: String,
cityId: String,
city: City,
}
在上述情况下,我想在哪里city是一个字段解析器,并且它需要访问cityId,这是父类型的属性。我认为这应该作为参数传递给字段解析器,但事实并非如此。 有没有办法做到这一点?
使用对象声明架构时,可以看到相同的情况,在这种情况下,传递给解析器函数的firs值为root。
答案 0 :(得分:1)
仅通过根值传递解析函数是有效的,因为它依赖于默认的解析器行为,并且仅适用于根级字段。不幸的是,如果您使用buildSchema
,则提供解析器的唯一方法是通过根值。
您的选择是:
以编程方式构建架构,而不使用架构定义语言(SDL)。这将允许您为架构中的任何字段指定一个resolve
函数,并且resolve函数将获取所有四个参数(父值,参数,上下文和信息)。您可以check out the docs举一些例子。
在SDL中编写架构,但使用makeExecutableSchema
中的graphql-tools
来生成GraphQLSchema实例。 makeExecutableSchema
允许您轻松地为任何字段注入解析器,并提供许多其他功能。可以在here中找到有关如何以这种方式生成模式的更多信息。
为express-graphql
转储apollo-server
,在后台使用makeExecutableSchema
,并提供了express-graphql
没有的许多其他功能。 Check the docs了解入门方法。