GraphQL 的错误处理和异常信息

阅读时长 4 分钟读完

GraphQL 作为一种用于构建 API 的新型查询语言,具有很多优势。然而,当我们在使用过程中遇到错误时,如何快速地定位、修复和防范错误,这是一个非常重要且必要的问题。本文将会介绍 GraphQL 的错误处理和异常信息,帮助读者更好地利用 GraphQL。

错误处理

在使用 GraphQL 过程中,产生错误的原因可能非常复杂,比如字段不存在、数据类型不匹配、解析错误、权限错误等等。为了方便开发和调试,GraphQL 提供了默认的错误处理机制。当发生错误时,GraphQL 会在响应中返回标准的错误对象,其中包括错误的类型、描述和位置等信息。

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

可以看到,GraphQL 的错误响应中包含一个 errors 数组,其中每一个元素都是一个包含错误信息的对象。该对象包含了错误信息、出错的位置、错误的路径以及错误的类型等。

除此之外,我们还可以通过自定义的方式来处理错误。

在 GraphQL 的 Schema 中,我们可以定义一个 onError 函数,来处理所有的错误。例如,在以下代码中,我们只需在 onError 函数中记录错误即可。

异常信息

除了默认的错误信息,GraphQL 还支持用户自定义的异常信息。当我们需要返回详细的错误信息时,可以使用 GraphQLError 类来创建自定义的异常信息。此时,返回的错误信息将会包含更多的额外信息,如下所示:

上述代码中,我们使用 GraphQLError 类来创建自定义的异常信息,将异常信息中的 articleIdpath 信息传递过去。这些附加信息将被包含在错误信息的 extensions 字段中,并通过响应返回给客户端。

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

除此之外,GraphQL 中还提供了 formatError 函数,用于格式化错误信息。在该函数中,可以对错误信息进行自定义的格式化。

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

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

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

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

在上述代码中,我们重新定义了 formatError 函数,对错误信息进行了自定义格式化,并为文章链接添加了一个 articleUrl 字段。

总结

GraphQL 的错误处理和异常信息有很多种用法,本文仅介绍了其中的几个。在实际使用时,应根据具体情况进行选择和使用。在构建后端 API 时,合理的错误处理和异常信息,能够帮助我们更好地减少错误和提高代码质量,提升用户体验。

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

纠错
反馈