【发布时间】:2021-03-28 23:20:02
【问题描述】:
我创建了一个 express-graphql 服务器,如果在解析器中遇到错误,则会抛出一个错误对象。这会产生一个错误数组,其中包含错误和 500 http 状态。
我使用 apollo 为 graphql 客户端创建了一个 swiftui 应用程序。 500 个状态进入失败的函数,我无法从服务器读取错误。
我已经考虑在 500 中更改 http 状态,但无济于事。其他人遇到过这个问题吗?如何解决?
在邮递员中我得到:
{
"errors": [
{
"message": "Email invalid",
"locations": [
{
"line": 2,
"column": 5
}
],
"path": [
"recover"
]
}
],
"data": null,
"extensions": {
"runTime": 198
}
}
我在解析器中抛出
if (!email) {
throw new HTTP404Error('Email invalid');
}
错误类
class HTTP404Error extends HTTPClientError {
constructor(message = 'Not found') {
super(message);
this.statusCode = 404;
}
}
在我的catch块中如下
.catch((e) => {
if (e instanceof PrismaClientValidationError) {
throw new HTTP409Error('Validation error');
} else {
if (e.code === 'P2002') {
throw new HTTP409Error('Constraint violation');
}
throw new HTTP400Error(e.message);
}
})
由于该应用程序是一个混合的 rest 和 graphql 服务器,因此在 'metrics'、'healthcheck' 等其余端点中抛出的所有错误都会按预期进行处理。它只是 express-graphql 将所有错误处理为 500 的 graphql 端点
【问题讨论】:
-
API 致命错误...调试网络请求正文以检查哪些查询(和变量)有问题 - 在服务器游乐场或邮递员中尝试,调试服务器代码
-
在邮递员中,我得到了 graphql 错误,但 express-graphql 返回了 apollo ios 不喜欢的 500 状态,希望尽可能更改 500 返回状态,或者能够在 apollo ios 客户端中读取它
-
这是一个网络错误,而不是通常的 graphql 错误(总是 200) - 检查其他错误道具
-
不是网络错误。 express-graphql 在邮递员中以 500 状态返回错误消息,这是已知的
-
好的,不是网络错误,但也不是 graphql(用户可展示)错误;)显示完整的响应正文