GraphQL 中的错误处理及解决方法

阅读时长 6 分钟读完

在开发中,错误处理是十分重要的一环。GraphQL 作为一种新型的 API 架构,提供了一个方便灵活的查询语言,但同时也带来了一些新的错误处理问题。在这篇文章中,我们将介绍 GraphQL 中常见的错误类型和如何处理这些错误。

GraphQL 错误类型

GraphQL 定义了两种错误类型:语法错误和运行时错误。

语法错误

语法错误是在解析查询字符串时发现的错误。它们是由于查询字符串无法匹配 GraphQL 的语法规则而产生的。 GraphQL 对于语法错误有非常友好的错误提示,通常在错误位置上下文提供错误消息和详细的错误信息。 下面是一个语法错误的示例:

错误信息如下:

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

运行时错误

运行时错误是在执行查询时发现的错误。它们可能是由于查询中使用的字段不存在、请求的数据与数据库不一致、查询参数错误等原因导致的。 GraphQL 不会返回完整的错误信息,而是将错误信息集中放置在错误列表 errors 中,每个错误包含一个错误消息和描述错误的位置。

下面是一个运行时错误的示例:

假设 age 字段不存在,那么错误信息如下:

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

处理 GraphQL 错误

GraphQL 提供了一些处理错误的方法,以下是几种常见的方式。

自定义错误类型

GraphQL 允许开发人员自定义错误类型,以提供更好的错误消息和出错地点。 这可以通过继承 GraphQLError 类并覆盖其 messagelocationspath 属性来实现。

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

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

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

---

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

错误处理中间件

GraphQL 提供了一些钩子函数,可以在服务器端对查询进行处理。例如,在执行查询之前,可以插入一个中间件函数来处理错误。 graphql-middleware 就是一种代码简洁的 GraphQL 中间件库。

下面是一个中间件的示例,该中间件会统一处理查询中出现的 DatabaseError

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

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

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

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

外部错误转换为 GraphQL 错误

在服务器端,在向客户端返回 JSON 响应之前,可以将外部错误转换为 GraphQL 错误。这是实现错误转换的一种简单方法。

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

结论

在本文中,我们介绍了 GraphQL 中的常见错误类型和错误处理方法。无论从客户端或服务器端,正确处理这些错误是开发高质量 GraphQL 应用的关键,也会显著提高用户体验。为了最大程度地减少出现错误的可能性,请始终根据 GraphQL 规范编写代码,同时在服务器端实现适当的错误处理策略。

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

纠错
反馈