GraphQL 的异常处理,当出现锅的时候怎么办?

阅读时长 5 分钟读完

异常处理的重要性

在开发 Web 应用的过程中,异常处理是非常重要的一部分。当代码出现问题时,及时的捕捉和处理异常可以最大程度的避免因为程序崩溃而引起的损失。在 GraphQL 中,异常处理同样也具有重要的意义。

GraphQL 是一种用于 API 的查询语言,其优点在于可以通过一条查询语句只返回需要的数据,避免了传统 RESTful API 中多次请求数据的问题。当然,对于前端开发人员而言,在使用 GraphQL 进行 API 开发时,需要更加关注异常处理的相关问题,比如查询参数错误、数据库连接断开等等。因此,在 GraphQL 中如何处理异常,也是我们需要重点关注的一个问题。

GraphQL 异常的处理机制

GraphQL 规范(http://spec.graphql.org/)中特别指出了异常的处理机制,即当代码出现异常时需要返回 JSON 格式的数据。JSON 格式的数据对象中需要包含两个属性:

  • error:一个简单的字符串类型,表明错误的原因。
  • data:一个实际的数据对象。如果出现了异常,则这个属性的值应该为 null。

下面是一个 GraphQL 异常处理的示例代码:

在上述代码中,如果查询用户名属性时出现了异常,query API 将会返回以下的 JSON 数据:

图示如下:

代码实现

在实际应用中,我们可以使用第三方的 GraphQL 工具库来实现异常处理。下面以 Node.js 中的 express-graphql 库为例,介绍如何使用该库实现异常处理的功能。

安装 express-graphql

在介绍如何使用 express-graphql 实现异常处理之前,我们需要先安装该库。运行以下命令即可:

编写 GraphQL API

在进行异常处理之前,我们需要先编写好一个 GraphQL API。为了简单起见,我们在本篇文章中,将接口的查询条件固定为 id 参数。下面是示例代码:

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

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

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

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

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

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

在上面的代码中,我们定义了 User 类型和 Query 类型,同时指定了查询参数 id,并通过 root 对象来定义 user 查询的具体实现。在查询实现中,当传入的查询参数 id 不存在时,我们手动抛出异常 User with ID ${id} not found.

添加异常处理

使用 express-graphql 库可以很方便地实现 GraphQL API 的异常处理。我们只需要在 graphqlHTTP 函数中添加 formatError 参数即可。该参数的作用是定义如何对输出的错误格式进行处理。

下面是代码示例:

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

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

在上面的代码中,我们定义了 formatError 函数,向客户端返回更加详细的异常处理信息。在 GraphQL 规范中,返回的 JSON 对象中需要包含 message 和 statusCode 两个属性,用于提示错误信息和状态码。上面的 formatError 函数实现了该功能,如果客户端出现了异常,将会返回如下的信息:

总结

通过本篇文章的学习,我们了解了 GraphQL 异常处理的相关知识,以及如何使用第三方库来实现异常处理的功能。在实际的开发中,及时的处理异常可以在应用程序出现问题时避免不必要的破坏和麻烦。希望本文能够对读者在开发 GraphQL API 过程中提供一定的参考和帮助。

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

纠错
反馈