首页 > 解决方案 > 未调用nestjs异常过滤器

问题描述

我正在尝试在我的 NestJS 应用程序中使用异常过滤器。我按照此处找到的说明设置我的 global ExceptionFilter,如下所示:

@Catch()
export class DemoExceptionFilter implements ExceptionFilter
{
    private readonly logger: Logger;

    constructor()
    {
        this.logger = new Logger(DemoExceptionFilter .name);
    }

    public catch(exception: unknown, host: ArgumentsHost): void
    {
        this.logger.log(exception);
    }
}

在我的 AppModule 中,我以DemoExceptionFilter这种方式注册:

@Module({
    ...
    providers: [
        ...
        {
            provide: APP_FILTER,
            useClass: DemoExceptionFilter
        }
        ...
    ]
})

当我在代码中的某处抛出异常时,NestJS 在控制台中记录了该异常,但DemoExceptionFilter没有调用我的异常。

我也试过

app.useGlobalFilters(new DemoExceptionFilter());

in main.ts,这也不起作用。

我错过了什么?

标签: javascriptnode.jstypescriptnestjs

解决方案


在文档中,它说明了将应用全局异常过滤器的位置:

全局范围的过滤器用于整个应用程序,用于每个控制器和每个路由处理程序

它们不用于应用程序启动。因此,如果您想测试您的异常过滤器,请在控制器的路由处理程序方法中抛出错误并调用该路由。


推荐阅读