GraphQL 是一个用于描述 API 的查询语言,它能够在前端和后端之间传输数据。GraphQL 的查询语言具有很强的灵活性和可扩展性,因此在前端开发中受到广泛的关注和使用。然而,在使用 GraphQL 进行开发时,我们难免会遇到错误。本文介绍了如何在 GraphQL 中处理错误,并提供了详细的演示和示例代码。
错误类型
GraphQL 可能会遇到以下两种类型的错误,这里列出了常见的错误类型:
语法错误
语法错误是由于请求语句没有遵循 GraphQL 的语法规则而产生的错误。如果 GraphQL 无法解析请求语法,则它将返回一个错误响应,并在错误消息中提供有关错误的详细信息。
以下是一个示例语法错误请求:
query { getUser(id: 1) { name username role } }
上面的请求中有两个错误:
- 没有指定查询名
role
字段未在 schema 中定义
因此,GraphQL 会返回这样的错误:
-- -------------------- ---- ------- - --------- - - ---------- ------- ------ -------- ----- ----- --- ------------ - - ------- - --------- - - - -- - ---------- ------- ----- ----- ------ -- ---- ------- --- --- ---- ---------- ------------ - - ------- -- --------- - - - - - -
运行时错误
运行时错误是由于应用程序逻辑错误引起的,例如数据库错误、逻辑错误等。GraphQL 会将这些错误包装在一个 GraphQLError
对象中并返回。如果查询中有多个字段和嵌套的字段,则错误消息将显示在响应中。
以下是一个示例错误请求:
query { getUser(id: 10) { name unknownField } }
在这个请求中,我们查询了一个不存在的字段 unknownField
,因此 GraphQL 会返回这样的错误:
-- -------------------- ---- ------- - --------- - - ---------- ------- ----- ----- -------------- -- ---- --------- ------------ - - ------- -- --------- - - -- ------- - ---------- -------------- - - - -
错误处理
在 GraphQL 中,我们可以使用 try...catch
语句来捕获运行时错误。我们还可以使用 GraphQL 的中间件来处理错误,并将错误信息添加到响应中。
try...catch 语句
try { const result = await graphql(schema, query, rootValue, contextValue, variables) // 处理结果 } catch (err) { // 处理错误 }
在上面的示例中,我们使用 try...catch
语句捕获了执行 GraphQL 查询时可能出现的错误。如果查询没有出现错误,则 result
变量将包含响应结果;否则,错误信息会被捕获并储存在 err
变量中。
中间件错误处理
在 GraphQL 中,我们可以使用中间件来处理错误。下面是一个使用 express-graphql
的中间件错误处理示例:
-- -------------------- ---- ------- ------------------- ------------- ------- --------- ----- ------------ ----- -- - ------ - -------- ------------ ----- ----------------- -- ----------------------- ---------- -------------- ----- -------- - - ---
在上面的代码中,我们使用 formatError
配置项来自定义错误处理。当错误发生时,formatError
函数会将错误嵌套在 GraphQL 的标准错误结构中,并将其添加到响应中。
示例代码
下面是一个简单的 GraphQL 查询示例代码,其中演示了错误处理和中间件使用方法:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ----------- - -------------------------- ----- - ----------- - - ------------------ ----- ------ - ------------- ---- ----- - ----------- ------ ---- - ---- ---- - --- --- ----- ------ --------- ------ - -- ----- --------- - - -------- -- -- -- -- - -- --- --- -- - ----- --- -------------- ---- ---- - ------ - --- -- ----- ----- ----- --------- ---------- - - - ----- --- - --------- ------------------- ------------- ------- ---------- --------- ----- ------------ ----- -- - ------ - -------- ------------ ----- ----------------- -- ----------------------- ---------- -------------- ----- -------- - - --- ---------------- -- -- - ------------------- ------- -- ----------------------- --
在上述示例代码中,我们定义了一个 getUser
查询,它返回一个用户的 id
、name
和 username
。如果 id
不等于 1
,则该查询将返回一个包含一条错误消息的 GraphQLError
对象。
结论
本文介绍了 GraphQL 的常见错误类型和错误处理方法。我们利用 try...catch
语句和中间件来捕获和处理错误,并将错误信息添加到响应中。掌握正确处理 GraphQL 中的错误将使我们的应用程序更加健壮和安全。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67498a92a1ce006354655294