是否有一种方法可以通过阿波罗异常处理程序手动运行异常?
我在GraphQL中拥有90%的应用程序,但仍然有两个模块作为REST,我希望统一处理异常的方式。
因此,GQL查询抛出包含消息、扩展等错误数组的标准200。
{
"errors": [
{
"message": { "statusCode": 401, "error": "Unauthorized" },
"locations": [{ "line": 2, "column": 3 }],
"path": [ "users" ],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"response": { "statusCode": 401, "error": "Unauthorized" },
"status": 401,
"message": { "statusCode": 401, "error": "Unauthorized" }
}
}
}
],
"data": null
}其他的则用JSON抛出真正的401:
{
"statusCode": 401,
"error": "Unauthorized"
}因此,我可以简单地捕获并包装阿波罗服务器格式的异常,还是必须手动格式化REST错误?谢谢
我正在使用NestJS和GraphQL模块。
发布于 2020-05-18 08:23:26
您可以设置一个自定义异常过滤器,它捕获REST错误并以阿波罗服务器格式包装它们。类似于:
@Catch(RestApiError)
export class RestApiErrorFilter implements ExceptionFilter {
catch(exception: RestApiError, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const status = 200;
response
.status(status)
.json(RestApiErrorFilter.getApolloServerFormatError(exception);
}
private static getApolloServerFormatError(exception: RestApiErrorFilter) {
return {}; // do your conversion here
}https://stackoverflow.com/questions/61864912
复制相似问题