前言
GraphQL 是一个基于类型和字段的查询语言,它允许我们以一种简洁、强类型和可理解的方式来描述和查询 API 数据。然而,GraphQL 本身不包含错误处理方案,这就需要我们自己来处理错误。一个很好的解决方案是使用 @tipe/graphql-apollo-errors 这个 npm 包。本文将详细介绍如何使用这个包来处理错误。
安装
首先,我们需要在项目中安装 @tipe/graphql-apollo-errors 包。可以使用 npm 或者 yarn 进行安装:
--- ------- ---------------------------
或
---- --- ---------------------------
使用
错误类型
@tipe/graphql-apollo-errors 支持以下五种错误类型:
- BAD_USER_INPUT
- UNAUTHENTICATED
- FORBIDDEN
- NOT_FOUND
- INTERNAL_SERVER_ERROR
集成
首先,需要引入两个包:
----- - ----------- - - --------------------------------------- ----- - ----------- - - -------------------------
接下来,使用 createError
函数来创建错误:
----- ------- - ----------------------------- - -------- ----- -- - ---- ----- --------- ----- - ---- -------- -- ---
createError
函数的第一个参数为错误类型,可以是上面列出的五种之一。第二个参数为一个对象,包含错误信息和可选的数据。这里我们自定义了一个 myError
。
接下来,在 GraphQL Resolver 中使用 ApolloError
包裹错误即可:
----- -------- ----------- - ----- -- - --- - ----- -------- - ----- --- - ----- --- ------------------- ---------- -------- - -
上面的代码中,我们在 Resolver 中抛出了 myError
,然后用 ApolloError
包裹并抛出。这个错误会被 Apollo Server 捕获,并返回给客户端。
错误处理程序
我们可以定义错误处理程序来捕获错误并进行自定义处理。首先需要定义错误捕获函数:
-------- ----------------- - -- --------------- -- ------------------- --- ----------------- - ------------------- -- ------ - ---- - ------------------- - -
这个函数接收一个错误对象,并根据错误类型进行处理。在这里,我们为 BAD_USER_INPUT
添加了特殊处理。其余的错误类型,我们将其打印至控制台。
接下来,在 Apollo Server 配置中使用错误处理程序:
----- ------ - --- -------------- --------- ---------- ------------ ------------- ---
可以看到,我们将 handleErrors
函数传给了 formatError
。这个函数会在 Apollo Server 捕获到错误时调用。
完整示例
接下来,我们来看一个使用 @tipe/graphql-apollo-errors 的完整示例。
首先,我们定义了 createUser
mutation:
----- - ----------- - - --------------------------------------- ----- - ----------- - - ------------------------- ----- ----- - -------- -------- ----- -------- - ----- -------- --- - ---- -- - -- ---------------------- - ----- ----------------------------- - -------- -------- ------- -------- ----- - ----- -- --- - ---- - ----------------- ------ ----- - -- -------------- - ---------
在这个 mutation 中,我们首先判断名字是否已经被使用,如果被使用则抛出了一个 BAD_USER_INPUT
类型的错误。
接下来我们在 Schema 中定义这个 mutation:
---- -------- - ---------------- --------- ------- -
为了测试这个 mutation,我们来定义一个测试 Query:
---- ----- - --------- ---------- -
下一步,我们需要定义错误处理程序:
-------- ----------------- - -- --------------- -- ------------------- --- ----------------- - ------------------- -- -- -------------- - ---- - ------------------- - -
最后,在 Apollo Server 启动时添加这些代码:
----- --------- - - ------ ------------------------------ --------- - ----------- ---------------------------------- -- -- ----- ------ - --- -------------- --------- -------------------- ---------- ------------ ------------- ---
现在,当我们尝试创建已有的用户时,就会得到如下错误:
- --------- - - ---------- ----- ---- ------- -------- ------------ - - ------- -- --------- - - -- ------- --------------- ------------- - ------- ----------------- ------- ----- ------- - ------- -------- - - - -- ------- ---- -
这个错误符合我们的预期,我们成功地使用了 @tipe/graphql-apollo-errors,提升了我们的错误处理体验。
总结
以上是本文介绍的 @tipe/graphql-apollo-errors 包的使用教程。本文从安装、使用和错误处理程序入手,详细介绍了如何使用这个包来处理错误,希望对大家有所帮助。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60057c2e81e8991b448ebbc0