如何从 Schema 向 Resolver 传递参数

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 函数接收四个参数:

  1. parent:该字段的父级的解析结果
  2. args:GraphQL 查询中传递的参数
  3. context:与 Resolver 函数相关的全局数据
  4. 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