首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过阿波罗服务器(NestJS)处理异常

通过阿波罗服务器(NestJS)处理异常
EN

Stack Overflow用户
提问于 2020-05-18 07:56:10
回答 1查看 5.7K关注 0票数 6

是否有一种方法可以通过阿波罗异常处理程序手动运行异常?

我在GraphQL中拥有90%的应用程序,但仍然有两个模块作为REST,我希望统一处理异常的方式。

因此,GQL查询抛出包含消息、扩展等错误数组的标准200。

代码语言:javascript
运行
复制
{
  "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:

代码语言:javascript
运行
复制
{
    "statusCode": 401,
    "error": "Unauthorized"
}

因此,我可以简单地捕获并包装阿波罗服务器格式的异常,还是必须手动格式化REST错误?谢谢

我正在使用NestJS和GraphQL模块。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-18 08:23:26

您可以设置一个自定义异常过滤器,它捕获REST错误并以阿波罗服务器格式包装它们。类似于:

代码语言:javascript
运行
复制
@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
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61864912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档