GraphQL:传递给执行的rootValue规范是什么?
我使用expressgraphql,它用GraphQL:传递给执行的rootValue规范是什么?,graphql,Graphql,我使用expressgraphql,它用rootValue初始化并将其传递给graphql的函数。我想知道什么是rootValue的规范。我看过一些简单的例子,但我对完整的规范感兴趣。根值是特定于javascript实现的,据我所知,不是官方规范明确要求的东西 这是中提供的resolve函数(或解析器)的类型定义: 传递给解析器的第一个参数是“源”、“根”或“父”值。字段始终与某个对象类型关联。“source”值只是返回该对象类型的字段解析为的值。例如,给定如下查询: { user(id:
rootValue
初始化并将其传递给graphql的函数。我想知道什么是rootValue
的规范。我看过一些简单的例子,但我对完整的规范感兴趣。根值是特定于javascript实现的,据我所知,不是官方规范明确要求的东西
这是中提供的resolve
函数(或解析器)的类型定义:
传递给解析器的第一个参数是“源”、“根”或“父”值。字段始终与某个对象类型关联。“source”值只是返回该对象类型的字段解析为的值。例如,给定如下查询:
{
user(id: 1) {
location {
city
}
}
}
user
字段返回对象类型。解析时,解析后的值作为“源”传递到位置
解析程序。类似地,当location
解析时,解析的值将传递给所有请求字段的解析程序,如city
在我们的示例中,user
是字段,与其他字段一样,它恰好位于Query
类型上,但该类型本身仍然是对象类型。因为它是一个字段,所以可以通过调用与其关联的解析程序来解析它。但是因为它位于查询的根,所以没有“源”值。这是传递给execute
的rootValue
的唯一用途——它作为“源”值传递给每个根级别的解析器
换句话说,对于查询
、变异
和订阅
类型的每个字段,您设置的根值
都将作为第一个参数传递给解析器
由于rootValue
仅适用于根级别的解析器,因此它的使用非常有限。所有解析程序都可以使用的任何数据都应该包含在上下文中
为了完整起见,我应该注意到,有一些示例展示了如何使用SDL和buildSchema
创建模式。由于buildSchema
不提供为任何字段提供解析程序的方法,因此这些示例提供了通过rootValue
传入解析程序函数来解析根级别字段的方法。这是因为,正如文档所述:
[如果]未提供冲突解决程序函数,则使用默认的冲突解决程序,在与字段同名的源上查找方法。如果找到,则使用(args、context、info)调用该方法
但是,rootValue
仅对根类型(查询、变异和订阅)上的字段可用。如果以这种方式创建架构,则无法为任何其他类型的字段定义解析程序。换句话说,不要这样做。有关更多详细信息,请参阅
{
user(id: 1) {
location {
city
}
}
}