【发布时间】:2021-07-26 10:45:59
【问题描述】:
我已经使用查询实现了 graphql apollo 服务器:
ordersSearch{
name
orders: {
id
name
}
}
对于不存在数据的订单,我想为带有如下数据的订单抛出未找到的错误数组:
{
"errors": [{
"message": "404: Not Found",
"path": [ "ordersSearch", 0, "order", 1 ],
"extensions": { … }
},
{
"message": "404: Not Found",
"path": [ "ordersSearch", 0, "order", 3 ],
"extensions": { … }
}],
"data": “ordersSearch”: [
"name": “test”,
"orders": [ {
“id": “2”,
name: “test”
}]
}
在上述响应数据中未找到订单 #1 和 #3 并找到订单 #2。
如何在 apollo 服务器中实现这一点。目前,如果我抛出错误,查询执行将停止,并返回一个错误,data 属性为null,如下所示:
{
"errors": [{
"message": "404: Not Found",
"path": [ "ordersSearch", 0, "order", 1 ],
"extensions": { … }
}],
"data": null
}
【问题讨论】:
-
也许我正在密切关注这个例子,而不是被问到的原理,但这对我来说很像 REST,而不是 GraphQL。你有什么理由不直接返回
null?那是 GraphQL 语言中的“未找到”。 -
我们想要一种方法让客户发现一些订单没有找到。此外,我们希望捕获并发送部分数据的其他模式道具中可能存在其他错误。
-
在这种情况下,
null是您告诉客户未找到某些订单的方式orders: [ {...}, null, null, {...}]。 -
我们想让用户知道哪些订单 ID 没有找到。如果我们发送 null 则不可能
-
掩盖不良数据库设计似乎是人为问题...改为使用数据库一致性
标签: angular error-handling graphql apollo apollo-server