在使用buildschema时,如何访问字段解析器内的父级解析器的值



当我们使用graphqlhttp时,第一个参数传递给解析方法实际上是客户端查询传递的参数,而不是根,这对于Query Resolver很好。但是,对于一个用户时期,现场解析器需要知道父母的价值,如何实现这一目标?

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

在上述情况下,我希望City将在哪里成为现场解析器,并且需要访问CityID,这是父母类型的属性。我认为应该将其作为参数传递给字段解析器,但事实并非如此。有没有办法实现这一目标?

我看到使用对象声明架构时可以执行相同的操作,在这种情况下,将FIR值传递给解析器函数是根。

简短答案:不要使用buildschema。

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

您的选择是:

  1. 编程构建模式,而不是使用模式定义语言(SDL)。这将允许您为模式中的任何字段指定resolve函数,并且该解决功能将获得所有四个参数(父值,参数,上下文和信息)。您可以查看文档以获取一些示例。

  2. 在SDL中写下您的架构,但使用graphql-tools中的makeExecutableSchema来生成您的GraphQlSchema实例。makeExecutableSchema允许您对任何字段无痛地注入解析器,并提供许多其他功能。有关如何以这种方式生成架构的更多信息可以在此处找到。

  3. apollo-server的转储express-graphql,它在引擎盖下使用makeExecutableSchema,并提供了express-graphql没有的许多其他功能。检查文档以获取如何入门。

最新更新