GraphQL 中的错误处理技巧详解

GraphQL 是一种用于 API 开发的查询语言,它专注于提高数据传输效率和可扩展性。虽然 GraphQL 为前端开发人员提供了许多便利,但是如果不处理错误,它可能会成为一个致命的缺陷,因为它的错误处理方式与传统的 REST API 不同。

在本文中,我们将讨论 GraphQL 中的错误处理技巧,这些技巧不仅可以帮助您识别和纠正错误,还可以提高您的编写可靠代码的技能。

错误类型

在 GraphQL 中,错误有两种类型:语法错误和运行错误。

语法错误

语法错误发生在查询或变异输入中,当 GraphQL 引擎无法将其解析为有效的操作或片段时发生。当客户端发送错误的查询时,服务器会返回带有错误详情的错误对象。

以下是一个示例查询,其中包含语法错误:

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

这将返回一个带有以下错误消息的错误对象:

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

运行错误

运行错误发生在查询或变异执行期间,当请求无法得到响应或遇到错误时发生。

以下是一个示例查询,其中存在运行错误:

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

这将返回一个带有以下错误消息的错误对象:

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

错误处理

在 GraphQL 中,有几种处理错误的方法。以下是最常见的三种方法:

1.异常处理

异常处理是最常见的错误处理方法,它使用 try-catch 块捕获并处理可能导致错误的语句。实现异常处理的好处是,它可以封装单个错误,并在多个位置使用错误处理。

以下是一个基于 GraphQL 的异常处理程序的示例:

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

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

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

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

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

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

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

2.自定义错误类

自定义错误类会为特定的错误实现一个包装器。这有助于标准化错误消息和错误代码,以便客户端和服务器端代码都能够处理它们。

以下是一个自定义错误类的示例:

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

可通过以下方式修改异常处理程序以使用 UserNotFoundError:

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

3.使用 GraphQL 中间件

另一个常见的错误处理方法是使用 GraphQL 中间件。GraphQL 中间件可以在执行查询之前、之后或同时处理解析过程、验证和权限等问题。错误处理器也是其中之一。

以下是一个使用 express-graphql 中间件的示例:

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

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

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

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

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

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

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

结论

在 GraphQL 中,错误处理非常重要。在处理异常、自定义错误类或使用中间件时,需要小心处理错误,以确保客户端与服务端代码都可以友好地处理它们。通过上述方法进行正确的错误处理,将能更好地识别和纠正错误,提高代码的可信性。

希望这篇文章能让您深刻理解 GraphQL 中的错误处理,并为您的项目提供指导和帮助。

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