[NestJs]错误拦截器,异常过滤器

什么是错误拦截器?

在应用程序开发中,难免会遇到各种错误和异常。为了更好地处理这些情况,NestJS 提供了错误拦截器。错误拦截器允许我们在应用程序的不同层次上捕获、处理和转换异常,从而提高应用程序的可维护性和稳定性。

@Injectable和@Catch的区别

在上一篇文章中,我们自定义了一个响应拦截器,使用了@Injectable装饰器,主要作用是表示一个类是一个可注入的服务,而@Catch用于创建自定义异常过滤器,用于捕获和处理特定类型的异常.

自定义异常过滤器

import {
  Catch,
  ExceptionFilter,
  HttpException,
  ArgumentsHost,
} from '@nestjs/common';
import { Response, Request } from 'express';
@Catch()
export class HttpFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const request = ctx.getRequest<Request>();
    const status = exception.getStatus();
    response.status(status).json({
      statusCode: status,
      msg: exception.message,
      timestamp: new Date().toISOString(),
      path: request.url,
    });
  }
}

在上面代码中,创建了一个 HttpFilter 类,它捕获 HttpException 类型的异常。在 catch 方法中,我们可以访问请求、响应等信息,并根据异常类型执行相应的处理逻辑。

注册错误拦截器

import { HttpFilter } from './common/exception.filter';
app.useGlobalFilters(new HttpFilter());

main.ts中全局注册,或在controller中单独使用

使用效果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值