9. 错误!当出现问题时
2m

我们的 Catstronauts 应用程序开发进展非常顺利。但我们知道,现实世界中并非总是如此。

事情出错的方式不止一种。在我们的旅程中,当服务器正在根据模式验证查询 AST 时,它可能会遇到无效的或格式错误的选择。这样一来,查询的旅程就会中断,并带着错误返回到客户端。

Hand-drawn illustration depicting a GraphQL server returning an error to client-land because of malformed queries

让我们看一个尝试的示例numberOfViews ,因为我们想将这部分数据添加到主页面的曲目卡片中。我们知道它存在于我们的中,因为我们甚至看到了/tracks端点返回了它!

确实如此,但numberOfViews 不是我们的一部分。如果我们尝试将其添加到中,Explorer 会用一个有用的红色波浪线告诉我们查询有问题。

https://127.0.0.1:4000
Screenshot of GraphOS Studio Explorer showing an invalid field, `numberOfViews`, underlined by a red squiggly line

我们仍然可以尝试运行,它将开始它的旅程。但这个旅程将在服务器验证步骤中中断,此时服务器将返回其响应。

在响应中,我们将看到一个新的键:errors

https://127.0.0.1:4000
Screenshot of GraphOS Studio Explorer showing the error we get in response to submitting a query with an invalid field
代码挑战!

在 Apollo Sandbox 的 Explorer 中,将 tracksForHome 内的所有选定字段替换为仅 "numberOfViews"。将整个响应复制粘贴到下面。

errors 是一个数组,包含服务器尝试执行时发生的每个错误。所以是的,可能存在多个错误!ApolloServer 提供错误代码,这将有助于缩小导致问题的原因。

在本例中,我们只有一个错误,代码为GRAPHQL_VALIDATION_FAILED,它甚至会告诉我们哪个与我们的模式不符。

在服务器响应中,您预计在 JSON 对象中找到哪些键?

为了修复错误,我们知道我们需要修复我们的,或者请我们的后端团队迭代模式,并可能添加新的

其他错误在前端正确处理时特别有用,可以告知用户错误的性质,例如无效的用户输入。

最后,请注意,有时当返回错误时,它仍然可以返回您请求的一些数据。我们将在未来的课程中讲解如何处理类似的局部结果。

当您查询模式中不存在的字段时,服务器会发送什么错误代码?
上一步

分享您关于本课的疑问和评论

您的反馈有助于我们改进!如果您遇到问题或困惑,请告诉我们,我们会帮助您。所有评论都是公开的,必须遵守 Apollo 行为准则。请注意,已解决或已处理的评论可能会被删除。

您需要一个 GitHub 帐户才能在下方发帖。没有帐户吗? 请在我们的 Odyssey 论坛中发帖。