如何在 Apollo 和 GraphQL 中处理错误?

阅读时长 5 分钟读完

前言

现在,越来越多的开发者在使用 GraphQL 和 Apollo 来构建 Web 应用程序。虽然 GraphQL 和 Apollo 提供了许多便利,但错误处理是一个重要的问题。因此,本文将介绍如何在 Apollo 和 GraphQL 中处理错误。

Apollo 中的错误处理

错误分类

Apollo 中的错误可以分为两类:网络错误和 GraphQL 语法错误。

网络错误通常是由于网络问题引起的,例如服务器无法连接、响应超时等。对于这种情况,Apollo 提供了一种错误处理机制,可以在请求错误时自动重试。

GraphQL 语法错误通常是由于 GraphQL 查询或变异语句中存在语法错误引起的。对于这种情况,Apollo 会抛出一个 GraphQL 错误,并将其包装在一个 Apollo 错误中返回。

错误处理示例

下面是一个处理网络错误的示例代码:

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

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

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

在这个示例中,我们创建了一个 HttpLink 对象来连接 GraphQL 服务器。然后,我们使用 onError 函数创建一个链接,以便在发生网络错误时进行处理。如果发生了网络错误,我们使用 console.log 输出错误信息,并进行重试。

下面是一个处理 GraphQL 语法错误的示例代码:

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

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

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

在这个示例中,我们使用 ApolloClient 对象创建一个客户端,并使用 query 函数发送一个 GraphQL 查询。如果发生 GraphQL 语法错误,我们使用 catch 函数捕获错误并输出错误信息。

GraphQL 中的错误处理

错误分类

GraphQL 中的错误可以分为两类:业务逻辑错误和 GraphQL 语法错误。

业务逻辑错误通常是由于应用程序的业务逻辑引起的,例如无效的参数、权限不足等。对于这种情况,GraphQL 会抛出一个 GraphQL 错误,并将其包装在一个响应中返回。

GraphQL 语法错误通常是由于 GraphQL 查询或变异语句中存在语法错误引起的。对于这种情况,GraphQL 会抛出一个语法错误,并将其包装在一个响应中返回。

错误处理示例

下面是一个处理业务逻辑错误的示例代码:

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

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

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

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

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

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

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

在这个示例中,我们定义了一个 Query 类型,其中包含一个 user 查询。在 resolvers 中,我们实现了 user 查询,并在查询中检查了用户是否存在。如果用户不存在,我们抛出一个错误并返回一个错误响应。

下面是一个处理 GraphQL 语法错误的示例代码:

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

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

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

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

在这个示例中,我们定义了一个 Query 类型,其中 user 查询存在语法错误。如果运行这个代码,GraphQL 会抛出一个语法错误,并将其包装在一个响应中返回。

结论

在本文中,我们介绍了如何在 Apollo 和 GraphQL 中处理错误。对于网络错误和 GraphQL 语法错误,我们提供了相应的解决方案。我们还提供了一些示例代码,以帮助您更好地理解错误处理的实现。希望本文对您有所帮助!

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

纠错
反馈