GraphQL 是一种用于构建 API 的查询语言,它可以让客户端按需获取数据,从而避免传统 REST API 中的过度获取数据的问题。然而,由于 GraphQL 的语法和设计方式与传统的 REST API 不同,因此在处理请求时,需要进行错误处理,并在出现异常或错误时返回适当的错误信息,以便客户端进行处理。
本文将重点介绍 GraphQL 中如何利用错误处理器(error handler)来处理异常,以及如何使用其中的异常处理逻辑。
错误处理器的使用
GraphQL 提供了 GraphQLServer
对象和 express-graphql
中间件来处理 GraphQL 请求,它们都有一个 formatError
函数,用于处理错误信息。
GraphQLServer 对象
在使用 GraphQLServer
对象时,可以通过 formatError
函数来自定义错误信息的格式和内容。
----- ------- - ------------------- ----- - ------------- - - ------------------------ ----- -------- - - ---- ----- - ----------- -------- ------- - -- ----- --------- - - ------ - ------ --- - ---- -- -- - -- ------- - ----- --- ----------- --------- -- ----------- - ------ ------ ---------- -- -- -- ----- ------ - --- --------------- --------- ---------- ------------ ----- -- - ------ - -------- ------------ ----- ---- -- -- --- --------------- -- - ------------------- ------- -- ------------------------ ---
在上面的例子中,我们自定义了一个错误处理器,它会返回一个包含自定义错误信息和自定义错误码的对象。
express-graphql 中间件
在使用 express-graphql
中间件时,可以通过 formatError
选项来自定义错误信息的格式和内容。
----- ------- - ------------------- ----- - ----------- - - --------------------------- ----- - ----------- - - ------------------- ----- ------ - ------------- ---- ----- - ----------- -------- ------- - --- ----- --------- - - ------ -- ---- -- -- - -- ------- - ----- --- ----------- --------- -- ----------- - ------ ------ ---------- -- -- ----- --- - ---------- -------- ----------- ------------- ------- ---------- --------- ----- ------------ ----- -- - ------ - -------- ------------ ----- ---- -- -- -- -- ---------------- -- -- - ------------------- ------- -- -------------------------------- ---
在上面的例子中,我们自定义了一个错误处理器,它也会返回一个包含自定义错误信息和自定义错误码的对象。
使用 GraphQL 中的错误处理器
在实际使用中,我们可以根据不同的错误情况使用不同的处理逻辑。
处理持久化错误
在应用程序中,当我们需要向数据库或外部 API 发送请求时,往往需要处理持久化错误。可以通过自定义错误处理器来处理此类错误。
------------ ----- -- - -- ------------------ ---------- -------------------------- - ------ - -------- -------------------------------- -- ------------------ --- ----- ---- -- - ---- -- ------------------ ---------- -------------------------------- - ------ - -------- -------------------------------- -- ------------------ --- ----- ---- -- - ---- - ------ - -------- ------------ ----- ---- -- - --
在上例中,我们使用 Sequelize 来访问数据库,如果捕获到持久化错误,则可以根据不同的错误类型返回不同的错误信息。
处理授权错误
GraphQL 默认使用 GraphQLNonNull
或 GraphQLObjectType
的实例来定义字段类型时,会自动添加非空验证逻辑,如果请求的字段值为空,则会抛出 ValidationError
异常。可以通过自定义错误处理器来处理授权错误。
------------ ----- -- - -- ------------------ ---------- ---------------- - ------ - -------- ---- ------------ ----- ---- -- - ---- - ------ - -------- ------------ ----- ---- -- - --
在上例中,我们使用自定义验证器来拒绝未经授权的请求,并返回相应的错误信息。
结论
错误处理器是 GraphQL 中一项非常重要的功能,它可以让我们有效地处理异常和错误,使客户端能够更加准确地处理 GraphQL 请求。我们应该充分利用这一功能来创建更加健壮的 GraphQL API。
完整代码参考:
https://github.com/futantan/graphq-error-handling-example
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6710cf83ad1e889fe2fc2a91