GraphQL 中的错误处理详解

GraphQL 是一种面向客户端的查询语言和 API 标准,可以让客户端自定义需要获取的数据,无需后端开发人员预先定义好接口。但在实际开发中,错误处理是不可避免的一环。本文将为大家介绍 GraphQL 中的错误处理方法,并提供示例代码,助力读者更好地理解并应用于实际项目中。

错误类型

GraphQL 中包括两种类型的错误:查询错误和执行错误。

查询错误

查询错误在语法解析和验证前发生,例如语法错误和字段无效错误。这些错误由 GraphQL 引擎处理。下面是一个查询错误的示例:

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

在这个例子中,年龄 是一个错误的字段名,因此会返回以下错误:

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

执行错误

执行错误在语法解析和验证后,当服务器执行查询时出现。这些错误通常是由于服务端登陆验证产生的,因为请求的有效载荷可能包含错误或无效数据。例如,如果 id 是必需的,但没有传递进来,就会返回 null 或错误。下面是例子代码:

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

此查询期望传递一个名为 id 的整数参数,否则会返回错误。如果在执行时传递了非整数类型的值,则会返回以下错误:

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

错误处理方式

在 GraphQL 中,错误处理的方式取决于错误类型和代码实现。下面是常见的错误处理方式。

过滤错误字段

在 GraphQL 中,我们可以使用 try-catch 块来捕获执行错误,并过滤出只需要的键值:

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

在上面的代码中,如果在查询中发生了错误,则会将错误信息打印到控制台上,并返回一个 null 值。

抛出错误给客户端

如果希望将执行错误直接返回给客户端,可以单独处理它。例如,如果用户在请求中传递了无效的参数,我们需要向客户端返回一个400 Bad Request 错误:

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

在上面的代码中,如果在查询中发生了错误,将捕获该错误并抛出一个新的 Error,其中包含原始错误信息。

自定义错误

GraphQL 允许自定义错误类型和错误处理器。这是通过执行错误的 extensions 域来实现的。例如,可以为 HTTP 请求错误创建一个 HttpError 类:

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

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

然后,可以在服务器端基于异常返回自定义错误信息。例如,如果查询中不包含有效的 API key,则可以抛出一个 HttpError,返回 401 Unauthorized 错误:

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

在这里,异常将被捕获,并使用 HttpError 类型抛出。

结论

GraphQL 中的错误处理显然是构建并优化真实世界应用所必需的。本文详细介绍了 GraphQL 中的错误类型及其处理方法,并在代码示例中演示了如何自定义异常并为客户端提供更好的错误显示。对于即将开始开发一个 GraphQL 项目的前端工程师,掌握这些知识是至关重要的。希望本文能够帮助大家在 GraphQL 项目中更好地处理错误。

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