express graphql返回500个ios apollo客户端无法读取错误的错误状态.解决方案



我创建了一个express graphql服务器,在解析器中,如果遇到错误,就会抛出一个error对象。这将导致一个带有错误和500 http状态的错误数组。

我为graphql客户端创建了一个使用apollo的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((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的混合服务器,因此rest端点中的所有抛出错误(如"metrics"、"healthcheck"(都会按预期进行处理。它只是表示graphql的graphql端点,它将所有错误处理为500,结果为

只有当模式本身无效时,快速graphql才会抛出500个错误。解析程序中抛出的错误不会发生这种情况——如果这些是您遇到的唯一错误,那么状态仍然是200。

如果架构无效,则服务器不应该从开始。在启动服务器之前,您可以在架构上手动调用validateSchema,如果返回任何错误,则可以退出进程并返回错误。

const { validateSchema } = require("graphql");
const schemaValidationErrors = validateSchema(schema);
if (schemaValidationErrors.length) {
console.log('Schema is not valid', schemaValidationErrors);
process.exit(1);
}

相关内容

  • 没有找到相关文章

最新更新