Javascript 如何在使用buildSchema时访问字段解析程序中父解析程序的值?

Javascript 如何在使用buildSchema时访问字段解析程序中父解析程序的值?,javascript,graphql,graphql-js,express-graphql,Javascript,Graphql,Graphql Js,Express Graphql,当我们使用graphqlHTTP时,传递给resolve方法的第一个参数实际上是客户机查询传递的参数,而不是根查询。这对于查询解析器来说很好。但对于字段解析器需要知道父级值的用例,如何实现这一点 type Person { name: String, cityId: String, city: City, } 在上面的场景中,我希望city是一个字段解析器,它需要访问cityId,cityId是父类型上的一个属性。我假设这应该作为参数传递给字段解析器,但事实并非如此。

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

type Person {
    name: String,
    cityId: String,
    city: City,
}
在上面的场景中,我希望city是一个字段解析器,它需要访问cityId,cityId是父类型上的一个属性。我假设这应该作为参数传递给字段解析器,但事实并非如此。 有没有办法做到这一点

type Person {
    name: String,
    cityId: String,
    city: City,
}
我发现当使用对象声明模式时也可以这样做,在这种情况下,传递给解析器函数的第一个值是root。

简短回答:

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

你的选择是:

  • 以编程方式构建模式,而不是使用模式定义语言(SDL)。这将允许您为模式中的任何字段指定
    resolve
    函数,该resolve函数将获得所有四个参数(父值、参数、上下文和信息)。你可以举一些例子

  • 在SDL中编写模式,但使用
    graphql工具中的
    makeExecutableSchema
    生成GraphQLSchema实例
    makeExecutableSchema
    允许您轻松地为任何字段插入解析器,并提供许多其他功能。可以找到有关如何以这种方式生成模式的更多信息

  • 为阿波罗服务器转储
    express graphql
    ,该服务器在引擎盖下使用
    makeExecutableSchema
    ,并提供了一些
    express graphql
    没有的附加功能。了解如何开始


  • 谢谢。没有明确的来源来获取此信息。