在 NestJS 中何时使用 ExceptionFilter 与 BaseExceptionFilter?

Vik*_*eni 5 nestjs

两种类型的过滤器的黑白差异是什么?以及何时使用什么?请用任何例子解释一下

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {

}

@Catch()
export class AllExceptionsFilter extends BaseExceptionFilter {

}
Run Code Online (Sandbox Code Playgroud)

Jay*_*iel 6

ExceptionFilter是一个接口,定义当前类应该实现catch带有签名的方法(exception: unknown, host: ArgumentHost)

BaseExceptionFilter是一个已经在 NestJS 中创建的具有工作catch方法的类。通过使用,extend您可以添加自己的逻辑,catch然后在实现调用的末尾super.catch(exception, host),让 Nest 处理剩下的事情。

两者的主要区别在于您想要编写多少逻辑以及想要添加多少逻辑。如果您对 Nest 已经处理错误的方式感到满意,并且只想添加记录错误的功能,对于数据库来说,那么extends BaseExceptionFilter就很合适。但是,如果您不关心 Nest 的异常过滤器默认情况下如何工作,那么implements ExceptionFilter编写您自己的自定义逻辑是可行的方法。