如何在 GraphQL 中处理错误

GraphQL 是一种用于 API 开发的查询语言和运行时环境。在前端开发中,GraphQL 可以帮助我们轻松地获取我们需要的数据,而不需要担心过度获取或未使用的数据。

然而,在与 GraphQL 进行交互时,出现错误是不可避免的。相比于传统的 REST API,GraphQL 的错误处理可能更加复杂。本文将介绍 GraphQL 中的错误处理,并提供一些示例代码以便理解。

GraphQL 中的错误类型

在 GraphQL 查询中,当服务器端检测到错误时,会返回一个格式化的错误响应,该响应通常包含以下信息:

  • message: 关于发生错误的简短说明。

  • locations:描述发生错误的 GraphQL 查询的位置。

  • path:导致错误的字段或操作的响应路径。

GraphQL 的错误类型主要有以下三种:

  1. 语法错误(Syntax Errors):这种错误与 GraphQL 查询的语法有关,通常由于拼写错误、无效的查询或意外的语法问题引起。

  2. 类型错误(Type Errors):这种错误通常与 GraphQL 查询的类型系统有关,通常是由于尝试在类型不匹配的位置上使用不正确的解析器而引起的。比如试图在字符串类型的字段上返回数字。

  3. 运行时错误(Runtime Errors):这种错误通常与服务器端数据源的问题有关,通常是由于网络调用失败、数据库查询失败等问题引起的。

在 GraphQL 中处理错误

在 GraphQL 中处理错误需要遵循以下几个步骤:

  1. 实现 GraphQL 的 errorHandler 函数:这个函数被用于捕捉和处理错误。通常情况下,我们应该在 errorHandler 函数中返回一个包含错误信息的对象,以便将其格式化为 GraphQL 能够处理的格式。

  2. 使用 try...catch 语句捕获错误:在服务器端代码中,我们应该使用 try...catch 语句来捕获可能发生的错误。如果错误发生了,errorHandler 函数就会被调用。

  3. 在 GraphQL 查询中,使用 Errors 数组返回错误信息:在服务器端代码中,我们应该使用一个 Errors 数组来返回所有错误信息。在 GraphQL 查询中,我们可以将该数组包含在响应的 errors 字段中,以便将所有错误信息一并返回。

以下是一个使用 Node.js 和 Express.js 框架构建的例子:

----- ------- - -------------------
----- - ----------- - - ---------------------------

----- -
  --------------
  ------------------
  --------------
  -----------
  ------------
- - -------------------

----- --- - ----------

----- ------------ - ----- -- -
  ---------------------------
  ------ -
    -------- ------------
    ---------- --------------
    ----- ---------
  --
--

----- -------- - --- -------------------
  ----- -------
  ------- -
    --- - ----- ---------- --
    ----- - ----- ------------- --
    ------ - ----- ------------- -
  -
---

----- --------- - --- -------------------
  ----- --------
  ------- -
    ------ -
      ----- --- ----------------------
      -------- ----- -- -- -
        --- -
          ----- ----- - ----- -------------
          ------ ------
        - ----- ------- -
          ------ --------------------
        -
      --
    --
  --
---

----- ------ - --- --------------- ------ --------- ---

------------------- -------------
  -------
  --------- -----
----

----- -------- ------------ -
  ----- -------- - ----- ---------------------------------
  -- ---------------- --- ---- -
    ----- --- ------------- --------
  -
  ------ ----------------
-

---------------- -- -- -
  ------------------- -- ------- -- ------------------------
---

上面的代码演示了如何在 GraphQL 中捕获一个运行时错误,并将其转换为一个 GraphQL 可以理解的格式。可以看到,在 queryType 中使用 try...catch 语句来捕获服务器端数据源的错误。如果错误发生,errorHandler 函数会被调用,并返回一个带有错误信息的对象。在 GraphQL 查询中,errors 字段将包含所有的错误信息。

结论

在 GraphQL 中,错误处理可能比传统 API 更加复杂。在本文中,我们介绍了 GraphQL 的错误类型,并提供了一些示例代码以便理解。核心思想是明确错误的类型,并实现一个 errorHandler 函数来将错误转换为 GraphQL 可以理解的格式。最后,我们将错误信息包含在 errors 字段中,以方便客户端获取和处理。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/673541420bc820c5824d6074