如何在 GraphQL 中处理错误?详细演示

阅读时长 6 分钟读完

GraphQL 是一个用于描述 API 的查询语言,它能够在前端和后端之间传输数据。GraphQL 的查询语言具有很强的灵活性和可扩展性,因此在前端开发中受到广泛的关注和使用。然而,在使用 GraphQL 进行开发时,我们难免会遇到错误。本文介绍了如何在 GraphQL 中处理错误,并提供了详细的演示和示例代码。

错误类型

GraphQL 可能会遇到以下两种类型的错误,这里列出了常见的错误类型:

语法错误

语法错误是由于请求语句没有遵循 GraphQL 的语法规则而产生的错误。如果 GraphQL 无法解析请求语法,则它将返回一个错误响应,并在错误消息中提供有关错误的详细信息。

以下是一个示例语法错误请求:

上面的请求中有两个错误:

  • 没有指定查询名
  • role 字段未在 schema 中定义

因此,GraphQL 会返回这样的错误:

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

运行时错误

运行时错误是由于应用程序逻辑错误引起的,例如数据库错误、逻辑错误等。GraphQL 会将这些错误包装在一个 GraphQLError 对象中并返回。如果查询中有多个字段和嵌套的字段,则错误消息将显示在响应中。

以下是一个示例错误请求:

在这个请求中,我们查询了一个不存在的字段 unknownField,因此 GraphQL 会返回这样的错误:

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

错误处理

在 GraphQL 中,我们可以使用 try...catch 语句来捕获运行时错误。我们还可以使用 GraphQL 的中间件来处理错误,并将错误信息添加到响应中。

try...catch 语句

在上面的示例中,我们使用 try...catch 语句捕获了执行 GraphQL 查询时可能出现的错误。如果查询没有出现错误,则 result 变量将包含响应结果;否则,错误信息会被捕获并储存在 err 变量中。

中间件错误处理

在 GraphQL 中,我们可以使用中间件来处理错误。下面是一个使用 express-graphql 的中间件错误处理示例:

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

在上面的代码中,我们使用 formatError 配置项来自定义错误处理。当错误发生时,formatError 函数会将错误嵌套在 GraphQL 的标准错误结构中,并将其添加到响应中。

示例代码

下面是一个简单的 GraphQL 查询示例代码,其中演示了错误处理和中间件使用方法:

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

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

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

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

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

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

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

在上述示例代码中,我们定义了一个 getUser 查询,它返回一个用户的 idnameusername。如果 id 不等于 1,则该查询将返回一个包含一条错误消息的 GraphQLError 对象。

结论

本文介绍了 GraphQL 的常见错误类型和错误处理方法。我们利用 try...catch 语句和中间件来捕获和处理错误,并将错误信息添加到响应中。掌握正确处理 GraphQL 中的错误将使我们的应用程序更加健壮和安全。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67498a92a1ce006354655294

纠错
反馈