当我们使用graphqlHTTP时,传递给resolve方法的第一个参数实际上是客户端查询而不是root传递的参数,这对查询解析器来说很好。但是对于一个用于字段解析器需要知道父级值的用例,如何实现这一点?
type Person {
name: String,
cityId: String,
city: City,
}
在上面的场景中,我希望city将成为一个字段解析器,并且它需要访问cityId,它是父类型的属性。我认为这应该作为参数传递给字段解析器,但事实并非如此。有没有办法实现这个目标?
我看到使用对象声明schema时可以完成相同的操作,在这种情况下,传递给解析器函数的firs值是root。
简短的回答:don't use buildSchema。
通过根值传递解析函数仅起作用,因为它依赖于默认的解析程序行为,并且它仅适用于根级别字段。不幸的是,如果你使用buildSchema
,提供解析器的唯一方法是通过root值。
你的选择是:
resolve
函数,并且该resolve函数将获取所有四个参数(父值,参数,上下文和信息)。你可以在check out the docs举个例子。makeExecutableSchema
中的graphql-tools
生成GraphQLSchema实例。 makeExecutableSchema
允许您无痛地为任何字段注入旋转变压器,并提供许多其他功能。有关如何以这种方式生成模式的更多信息可以在here找到。express-graphql
转移到apollo-server
,它在引擎盖下使用makeExecutableSchema
并提供express-graphql
没有的许多额外功能。 Check the docs如何开始。