在全局对象中使用的NestJS @Injectable:使用'new injectable'还是'app.use(injectable)'?

时间:2019-09-16 12:04:25

标签: nestjs

由于NestJS允许注入,因此我想确保自己编写的代码效率最高。

我正在使用全局拦截器包装我的应用程序响应,并使用全局过滤器来处理异常。

//main.ts:
app.useGlobalInterceptors(new ResponseWrapperInterceptor(app.get(LogService)));
app.useGlobalFilters(new ExceptionsFilter(app.get(LogService)));
//filter/interceptor.ts:
constructor(@Inject('LogService') private readonly logger: LogService) {}

在我的main.ts中,更有效率的是什么?这两种选择都有什么影响?有更好的方法吗?

//Option 1:
app.useGlobalInterceptors(new ResponseWrapperInterceptor(app.get(LogService)));
app.useGlobalFilters(new ExceptionsFilter(app.get(LogService)));

//Option 2:
app.useGlobalInterceptors(new ResponseWrapperInterceptor(new LogService()));
app.useGlobalFilters(new ExceptionsFilter(new LogService()));

1 个答案:

答案 0 :(得分:1)

关于影响力或哪种方法更好,我不能说太多。但是,如果您正在寻找让Nest处理依赖注入的方法,而不必这样做,则可以在AppModule中注册拦截器和过滤器,如下所示:

@Module({
  imports: [/* your imports here*/],
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: ResponseWrapperInterceptor
    }, {
      provide: APP_FILTER,
      useClass: ExceptionsFilter
    }
  ]
})
export class AppModule {}

APP_INTERCEPTOR导入APP_FILTER@nestjs/core的位置。 You can read more about it here