GraphQL 是一种新兴的 API 查询语言和运行时,它允许客户端指定所需的数据形式,从而解决了原来使用 RESTful API 中数据不准确的问题。 一般来说,GraphQL 有着很好的错误处理和异常处理机制,但有时处理异常和错误可能会有些棘手。本文将介绍如何在 GraphQL 中处理异常和错误,分享一些有关它们的详细信息、深入思考、学习以及指导实现的示例代码。
了解 GraphQL 的异常处理
GraphQL 请求可能会引发许多异常。在 GraphQL 中,大多数异常都是因为在查询执行期间出现了问题。它们可以简单地解释为 “无法完成查询请求”的原因。 这些不如预期的查询可能会有很多原因,包括用户验证失败、数据库连接失败以及查询的深度或宽度超出制定限制。
GraphQL 的异常处理分为两个步骤:异常分析和异常处理。
异常分析是针对 GraphQL 的特定解析器和执行器工具进行指定的,目的是发现哪些查询语句导致了异常,以及所需的反应是什么。
异常处理是指以简洁和明确的方式处理错误,从而将错误信息传递给客户端,而不是提供不太明确或无法理解的信息。
处理 GraphQL 中的异常
在 GraphQL 中处理异常有许多方法。以下是其中一些方法:
使用静态类型语言
使用 GraphQL 在静态类型语言上编写代码,如 TypeScript 或 Flow 等,可以使您检测到更多的运行时异常,并在编译代码时就运行测试。静态类型绑定可以帮助您在运行时捕获类型错误并进行修复。这有助于避免许多GraphQL调试错误。
捕获异常
在GraphQL中,您可以捕获异常并添加有关这些异常的详细信息。您可以使用try-catch块来捕获GraphQL查询的异常。如以下代码:
try { const result = await runGraphQLQuery(query); } catch (err) { // log error for debugging console.error(`query execution failed: ${err}`); res.status(500).json({ message: 'Internal server error' }); }
自定义错误处理
您可以自定义GraphQL 中出现的错误。 例如,您可以在 GraphQL 客户端中的执行函数中定义自定义错误处理:
-- -------------------- ---- ------- ------ ------- ---- ---------- ----- ------------------- - --- -- - ----- ------- - ---------- -- ------------- -- ------- -- ------- --- --------- ----------- --------------------- - ----- ------- - ----- ------- ------- ------------- -- - ----- ------ - ----- ----------------------- ------ -------------- -- --------------- - ----------------------------- -- ---------------------------- - ------ ------- --
在上面的例子中,graphqlErrorHandler
将异常信息输出到控制台。
错误格式化
格式化错误信息是 GraphQL 中另一个非常有用的技术。您可以使用错误格式化来将异常转换为有用和易于理解的格式。
举个例子,有一个 “Product” 对象,其中包含一些重要信息和一组错误。在添加新产品时,出现错误。您不想向所有客户端公开这些错误信息,因为它们可能仅与数据库相关,但可以将错误转换为类似于以下内容的有用格式:
-- -------------------- ---- ------- - --------- - - ------------ - - ------- -- --------- -- - -- ---------- ----- ------------ ------- - ------------- ---------- --------- ---- --------- -- ------------- - ------------ - ------------- - ----- - - - - -- ------- ---- -
在这个例子中,message
属性提供了一个有用的错误消息,path
属性表示错误所在的 GraphQL 查询路径。
结论
在 GraphQL 中,异常和错误处理是应用程序的一个非常重要的方面。在本文中,我们学习了如何在 GraphQL 中处理异常和错误,并分享了一些详细和深入的内容,包括在使用GraphQL时,捕获异常,自定义错误处理以及使用错误格式化,这些处理方式都可以使您的应用程序避免或减少错误。这篇文章对于想要学习 GraphQL 的初学者以及已经掌握 GraphQL 的开发人员来说都非常有帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670f13b25f5512810262d848