GraphQL 是一个使用 Schema 定义 API 的查询语言,这意味着我们需要在 Schema 中定义所有可供查询的字段和类型。当收到查询请求时,GraphQL 引擎解析查询并将其传递给 Resolver 函数以获取请求的数据。但是有些时候我们需要在 Resolver 函数中使用参数,那么我们该如何从 GraphQL Schema 向 Resolver 函数中传递参数呢?
Schema 中定义参数
在 GraphQL Schema 中定义参数非常简单,只需根据需要在字段定义中添加一个参数声明即可。例如,假设我们要获取用户列表,但是我们需要一个可选参数 filter
,以便根据 username 对结果进行筛选。我们可以在 type Query
中定义如下:
---- ----- - ------------- -------- -------- -
在这里我们定义了一个 users
查询,该查询接受一个可选参数 filter
,类型为 String
。现在我们可以在调用查询时提供 filter
参数,如下所示:
----- - ------------- ------- -
Resolver 函数中获取参数
一旦在 Schema 中定义了参数,我们就可以在 Resolver 函数中使用它了。Resolver 函数接收四个参数:
parent
:该字段的父级的解析结果args
:GraphQL 查询中传递的参数context
:与 Resolver 函数相关的全局数据info
:关于执行查询的详细信息
我们可以使用参数 args
在 Resolver 函数中获取来自请求的参数。例如,我们要在上面定义的 users
查询的 Resolver 函数中使用 filter
参数来过滤用户列表,我们可以在 Resolver 函数中这样获取参数:
----- --------- - - ------ - ------ -------- - ------ -- -------- ----- -- - -- ------ ----- ------------- - ----------------- -- ------------- --- -------- -- ----------- ------ -------------- -- -- --
在这里,我们使用了解构语法来从 args
中提取 filter
参数。在 Resolver 函数中,我们可以像处理任何其他 JavaScript 对象一样处理 args
参数。
带默认值的参数
有时我们想要在无参调用时提供默认值。例如,我们可能希望在没有提供 filter
参数时返回所有用户而不是什么都不返回。为此,我们可以在参数声明中可以定义参数的默认值。例如:
---- ----- - ------------- ------ - ------ -------- -
这里我们定义了 filter
参数,其默认值是 null
。如果不提供 filter
参数,它将使用默认值 null
。
现在在 Resolver 中我们修改一下代码:
----- --------- - - ------ - ------ -------- - ------ -- -------- ----- -- - --- ------------- - ------ -- ----- ------ --------- -- -------- - ------------- - ----------------- -- ------------- --- -------- - -- ----------- ------ -------------- -- -- --
现在我们已经成功地从 Schema 向 Resolver 传递了参数并使用了它。在实际开发中,使用参数更为复杂,但该过程始终会涉及这两步:在 Schema 中声明参数并在 Resolver 函数中获取参数。
示例代码
下面是一个完整的示例代码,该代码从 Schema 向 Resolver 传递参数,并使用了默认值以及参数在过滤操作中的使用。
----- - ------------- --- - - ------------------------- -- ------ ----- ----- - - - --- ---- --------- ------- ------ ------------------ -- - --- ---- --------- ------- ------ ------------------ -- -- -- -- ------- ------ ----- -------- - ---- ---- ----- - ------------- ------ - ------ -------- - ---- ---- - --- --- --------- ------- ------ ------- - -- -- -- -------- -- ----- --------- - - ------ - ------ -------- - ------ -- -------- ----- -- - --- ------------- - ------ -- ----- ------ --------- -- -------- - ------------- - ----------------- -- ------------- --- -------- - -- ----------- ------ -------------- -- -- -- -- -- ------------ -- ----- ------ - --- -------------- --------- --------- --- -- ----- ----------------------- --- -- -- - ------------------- ----- -- --------- ---
结论
以上是向 GraphQL Resolver 函数传递参数的详细指南。我们可以在 Schema 中定义参数,并在 Resolver 函数中将其作为参数来使用。我们还看到如何定义参数的默认值,并在 Resolver 函数中使用它们。GraphQL 的参数声明并不困难,因此我们可以轻松地在自己的应用程序中使用它们。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6732bd4e0bc820c5823e9855