处理 GraphQL 查询错误的方法

阅读时长 7 分钟读完

GraphQL 是一种查询语言和运行时环境,旨在从客户端向服务器端查询数据,它是一种比传统 API 更为灵活的交互方式。

GraphQL 查询可以非常复杂,包含多层嵌套的查询和多个参数,这也让它更容易出现错误。在本文中,我们将学习如何处理 GraphQL 查询中的错误,让我们先来了解一下 GraphQL 的错误类型。

GraphQL 错误类型

GraphQL 查询可能会返回三种不同类型的错误:语法错误,运行时错误和验证错误。

语法错误

语法错误表示查询字符串无法被解析,通常是因为字符串中的拼写错误、参数格式不正确或语法错误。GraphQL 解析器通常会在遇到错误时停止解析,并返回错误信息。

以下是一个示例 GraphQL 查询,其中有一个语法错误:

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

这个查询在 email 字段后面多了一个逗号,这是一个语法错误,GraphQL 解析器将返回以下错误信息:

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

运行时错误

运行时错误表示在执行查询时发生了错误,通常是因为后端数据库出现了问题、无法连接到后端服务或违反了数据模型约束。

以下是一个简单的 GraphQL 查询,它请求从一个不存在的数据库表中获取数据:

这个查询将返回以下错误:

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

验证错误

验证错误表示查询字符串不符合规则,例如缺少必需的参数或使用了无效的变量。验证错误在解析之前进行检查,并且可以在服务器端或客户端进行检查。

以下是一个查询字符串没有指定相应的参数造成的验证错误:

在这个例子中,必需的 $offset 参数没有被提供,因此将返回以下错误:

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

了解了 GraphQL 的错误类型之后,让我们来看看如何处理这些错误。

错误处理程序

GraphQL 服务器通常会提供一个错误处理程序,该处理程序可以捕获运行时错误并返回有关错误的信息。您可以在定义 GraphQL 服务时添加一个错误处理程序,例如以下示例:

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

在这个例子中,我们向 ApolloServer 构造函数传递了一个 formatError 函数,它将捕获 GraphQL 查询中的运行时错误并返回错误信息。

错误日志记录

另一种处理 GraphQL 查询错误的方式是将错误记录到日志文件中,以便稍后进行调查。许多日志记录工具可以与 GraphQL 集成,例如 winston, log4js 等。以下示例演示了如何使用 winston 记录 GraphQL 查询错误:

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

在这个例子中,我们使用 winston 记录 GraphQL 查询的错误,将错误信息记录到控制台或日志文件中。

结论

在处理 GraphQL 查询错误时,我们需要理解 GraphQL 的错误类型和相关的处理方式。我们可以使用错误处理程序或错误日志记录等技术来捕获和处理错误,以便更好地调试和修复错误。如有需要,您可以从服务器端或客户端进行错误处理。

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

纠错
反馈