在开发中,错误处理是十分重要的一环。GraphQL 作为一种新型的 API 架构,提供了一个方便灵活的查询语言,但同时也带来了一些新的错误处理问题。在这篇文章中,我们将介绍 GraphQL 中常见的错误类型和如何处理这些错误。
GraphQL 错误类型
GraphQL 定义了两种错误类型:语法错误和运行时错误。
语法错误
语法错误是在解析查询字符串时发现的错误。它们是由于查询字符串无法匹配 GraphQL 的语法规则而产生的。 GraphQL 对于语法错误有非常友好的错误提示,通常在错误位置上下文提供错误消息和详细的错误信息。 下面是一个语法错误的示例:
query { user { name age // syntax error } }
错误信息如下:
-- -------------------- ---- ------- - --------- - - ---------- ------- ------ -------- ----- ----- --- ------------ - - ------- -- --------- - - - - - -
运行时错误
运行时错误是在执行查询时发现的错误。它们可能是由于查询中使用的字段不存在、请求的数据与数据库不一致、查询参数错误等原因导致的。 GraphQL 不会返回完整的错误信息,而是将错误信息集中放置在错误列表 errors
中,每个错误包含一个错误消息和描述错误的位置。
下面是一个运行时错误的示例:
query { userByName(name: "Emma") { name age } }
假设 age
字段不存在,那么错误信息如下:
-- -------------------- ---- ------- - --------- - - ---------- ------- ----- ----- ----- -- ---- --------- ------------ - - ------- -- --------- - - - - - -
处理 GraphQL 错误
GraphQL 提供了一些处理错误的方法,以下是几种常见的方式。
自定义错误类型
GraphQL 允许开发人员自定义错误类型,以提供更好的错误消息和出错地点。 这可以通过继承 GraphQLError
类并覆盖其 message
、locations
和 path
属性来实现。
下面是一个自定义错误类型的示例:
-- -------------------- ---- ------- ------ - ------------ - ---- ---------- ----- --------------- ------- ------------ - -------------------- ---------- ----- - -------------- ----- ----- ----- ----- ----- - ---------- ---- --- - - --- ----- --- ----------------------- ----- --------- --------------- -----------
错误处理中间件
GraphQL 提供了一些钩子函数,可以在服务器端对查询进行处理。例如,在执行查询之前,可以插入一个中间件函数来处理错误。 graphql-middleware
就是一种代码简洁的 GraphQL 中间件库。
下面是一个中间件的示例,该中间件会统一处理查询中出现的 DatabaseError
。
-- -------------------- ---- ------- ----- ----------- - --------------------------- ----- - -------------------- - - ------------------------- ----- - --------------- - - ------------------------------ ----- --------- - ----------------------- ----- -------- - ---------------------- ----- ------ - ---------------------- --------- --------- --- ----- --------------- - ----- --------- ----- ----- -------- ----- -- - --- - ------ ----- ------------- ----- -------- ------ - ----- ----- - -- --------- --- ---------------- - ----- ---- -- ----- ----- ---- -- ------ -- ------------------ ----- ------- --- ---- ----- --- ------------ - ----- --- ------------------- - -- ----- ---------------- - ----------------------- ----------------- -------- --------- ------------- ------- ----------------- --------- ---- -- --
外部错误转换为 GraphQL 错误
在服务器端,在向客户端返回 JSON 响应之前,可以将外部错误转换为 GraphQL 错误。这是实现错误转换的一种简单方法。
-- -------------------- ---- ------- ------------- ----- ---- ---- ----- -- - --------------------- -- ----- ----- -------- - - -------- ----------- -- -- ------------ - --------------- - ---------------------- -- -- -------- ---------- ----- ----------- ---- - ------ ---------- ------- ---------- --- ---
结论
在本文中,我们介绍了 GraphQL 中的常见错误类型和错误处理方法。无论从客户端或服务器端,正确处理这些错误是开发高质量 GraphQL 应用的关键,也会显著提高用户体验。为了最大程度地减少出现错误的可能性,请始终根据 GraphQL 规范编写代码,同时在服务器端实现适当的错误处理策略。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66efca9c6fbf96019730e2b5