Nestjs-自定义拦截器应该组织在一个模块中吗?

Nestjs-自定义拦截器应该组织在一个模块中吗?,nestjs,Nestjs,我的api网关中有一个拦截器,它将rpc异常转换为http异常。 拦截器放置在共享目录中,其中没有任何模块 在我的控制器中,我使用拦截器如下: 从'shared/grpc errors.interceptor'导入{GrpcErrorsInterceptor}; @控制器(“mycontroller”) @使用拦截器(新的GrpcErrorsInterceptor()) 导出类MyController{} 另一方面,我看到了将拦截器添加到模块中的提供者数组的方法: 从'@nestjs/core

我的api网关中有一个拦截器,它将
rpc异常
转换为
http异常
。 拦截器放置在共享目录中,其中没有任何模块

在我的控制器中,我使用拦截器如下:

从'shared/grpc errors.interceptor'导入{GrpcErrorsInterceptor};
@控制器(“mycontroller”)
@使用拦截器(新的GrpcErrorsInterceptor())
导出类MyController{}
另一方面,我看到了将拦截器添加到模块中的提供者数组的方法:

从'@nestjs/core'导入{APP_INTERCEPTOR};
@模块({
供应商:[
{
提供:APP_拦截器,
useClass:MyInterceptor,
},
],
})
导出类SharedModule{}

那么,就“筑巢方式”而言,更好的方法是什么?在第二个示例中,如何将拦截器注入控制器?

这两种方法都很好。绑定拦截器时需要考虑的一件大事是,您希望拦截器全局绑定还是仅绑定到类或路由?通过使用
APP\u INTERCEPTOR
custom provider方法,您将全局绑定INTERCEPTOR,因此,如果您这样做,请确保已处理所有边缘案例。否则,您可以执行
@UseInterceptors(GrpcErrorsInterceptor)
并且仍然可以使用DI(如果需要)并将拦截器绑定到一个类或路由。

这两种方法都可以。绑定拦截器时需要考虑的一件大事是,您希望拦截器全局绑定还是仅绑定到类或路由?通过使用
APP\u INTERCEPTOR
custom provider方法,您将全局绑定INTERCEPTOR,因此,如果您这样做,请确保已处理所有边缘案例。否则,您可以执行
@UseInterceptors(GrpcErrorsInterceptor)
,仍然可以使用DI(如果需要)并将拦截器仅绑定到类或路由