我们的 Catstronauts 应用程序开发进展非常顺利。但我们知道,现实世界中并非总是如此。
事情出错的方式不止一种。在我们的查询旅程中,当服务器正在根据模式验证查询 AST 时,它可能会遇到无效的字段或格式错误的选择。这样一来,查询的旅程就会中断,并带着错误返回到客户端。
让我们看一个尝试查询的示例numberOfViews
字段,因为我们想将这部分数据添加到主页面的曲目卡片中。我们知道它存在于我们的数据源中,因为我们甚至看到了/tracks
端点返回了它!
确实如此,但numberOfViews
字段不是我们GraphQL 模式的一部分。如果我们尝试将其添加到查询中,Explorer 会用一个有用的红色波浪线告诉我们查询有问题。
我们仍然可以尝试运行查询,它将开始它的旅程。但这个旅程将在服务器验证步骤中中断,此时服务器将返回其响应。
在响应中,我们将看到一个新的键:errors
。
在 Apollo Sandbox 的 Explorer 中,将 tracksForHome
内的所有选定字段替换为仅 "numberOfViews"。将整个响应复制粘贴到下面。
errors
是一个数组,包含服务器尝试执行查询时发生的每个错误。所以是的,可能存在多个错误!ApolloServer
提供错误代码,这将有助于缩小导致问题的原因。
在本例中,我们只有一个错误,代码为GRAPHQL_VALIDATION_FAILED
,它甚至会告诉我们哪个字段与我们的模式不符。
为了修复错误,我们知道我们需要修复我们的查询,或者请我们的后端团队迭代模式,并可能添加新的字段。
其他错误在前端正确处理时特别有用,可以告知用户错误的性质,例如无效的用户输入。
最后,请注意,有时当查询返回错误时,它仍然可以返回您请求的一些数据。我们将在未来的课程中讲解如何处理类似的局部结果。
分享您关于本课的疑问和评论
您的反馈有助于我们改进!如果您遇到问题或困惑,请告诉我们,我们会帮助您。所有评论都是公开的,必须遵守 Apollo 行为准则。请注意,已解决或已处理的评论可能会被删除。
您需要一个 GitHub 帐户才能在下方发帖。没有帐户吗? 请在我们的 Odyssey 论坛中发帖。