GraphQL 作为一种用于构建 API 的新型查询语言,具有很多优势。然而,当我们在使用过程中遇到错误时,如何快速地定位、修复和防范错误,这是一个非常重要且必要的问题。本文将会介绍 GraphQL 的错误处理和异常信息,帮助读者更好地利用 GraphQL。
错误处理
在使用 GraphQL 过程中,产生错误的原因可能非常复杂,比如字段不存在、数据类型不匹配、解析错误、权限错误等等。为了方便开发和调试,GraphQL 提供了默认的错误处理机制。当发生错误时,GraphQL 会在响应中返回标准的错误对象,其中包括错误的类型、描述和位置等信息。
-- -------------------- ---- ------- - ------- - - -------- ------ ------------------ ------- ----- -- ---- --------- ---------- -- ----- -- ------- - --- ----- ----------- -------------------- ----------- - ----- ---------------------------- ---------- -- - - -- ----- ---- -
可以看到,GraphQL 的错误响应中包含一个 errors
数组,其中每一个元素都是一个包含错误信息的对象。该对象包含了错误信息、出错的位置、错误的路径以及错误的类型等。
除此之外,我们还可以通过自定义的方式来处理错误。
在 GraphQL 的 Schema 中,我们可以定义一个 onError
函数,来处理所有的错误。例如,在以下代码中,我们只需在 onError
函数中记录错误即可。
const schema = new GraphQLSchema({ query: QueryType, mutation: MutationType, subscription: SubscriptionType, onError: (err) => { logger.error(err); } });
异常信息
除了默认的错误信息,GraphQL 还支持用户自定义的异常信息。当我们需要返回详细的错误信息时,可以使用 GraphQLError
类来创建自定义的异常信息。此时,返回的错误信息将会包含更多的额外信息,如下所示:
throw new GraphQLError("博客不存在!", null, { articleId: "1001", path: ["blog", "article"] });
上述代码中,我们使用 GraphQLError
类来创建自定义的异常信息,将异常信息中的 articleId
和 path
信息传递过去。这些附加信息将被包含在错误信息的 extensions
字段中,并通过响应返回给客户端。
-- -------------------- ---- ------- - --------- - - ---------- --------- ------------- - ------------ ------- ------- -------- ---------- - - - -
除此之外,GraphQL 中还提供了 formatError
函数,用于格式化错误信息。在该函数中,可以对错误信息进行自定义的格式化。
-- -------------------- ---- ------- ----- ------ - --- --------------- ------ ---------- --------- ------------- ------------- ----------------- ------------ ------- -- - ----- ---------- - - ------------------- -- ------ --------------------- -- ---------------------- - --------------------- - ---------------------------------------------------------------- - ------ - -------- -------------- ---------- ---------------- ----- ----------- ---------- -- - ---
在上述代码中,我们重新定义了 formatError
函数,对错误信息进行了自定义格式化,并为文章链接添加了一个 articleUrl
字段。
总结
GraphQL 的错误处理和异常信息有很多种用法,本文仅介绍了其中的几个。在实际使用时,应根据具体情况进行选择和使用。在构建后端 API 时,合理的错误处理和异常信息,能够帮助我们更好地减少错误和提高代码质量,提升用户体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64691907968c7c53b0927561