首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在nestjs中的过滤器内注入服务

在nestjs中的过滤器内注入服务
EN

Stack Overflow用户
提问于 2018-09-22 23:00:08
回答 3查看 2.2K关注 0票数 3

我正在尝试将nestjs-config注入到我创建的以下异常处理程序中:

代码语言:javascript
复制
import { ExceptionFilter, Catch, ArgumentsHost, Injectable } from '@nestjs/common';
import { HttpException } from '@nestjs/common';
import { InjectConfig } from 'nestjs-config';

@Injectable()
@Catch()
export class HttpExceptionFilter implements ExceptionFilter {
  constructor(
    @InjectConfig()
    private readonly config,
  ) {
    this.config = config.get('errors');
  }
  catch(exception: HttpException, host: ArgumentsHost) {
    // some code here that calls this.config
  }
}

但是它返回了未定义的:TypeError: Cannot read property 'get' of undefined

以下是异常处理程序的全局定义方式:

代码语言:javascript
复制
const app = await NestFactory.create(AppModule, { cors: true });
app.useGlobalFilters(new HttpExceptionFilter());
await app.listen(3000);
EN

回答 3

Stack Overflow用户

发布于 2018-09-23 00:11:49

好的,我刚刚意识到,在你的代码中,你在容器之外创建了过滤器,因此ConfigService没有被注入。有几种方法可以解决这个问题。一

代码语言:javascript
复制
ConfigService.load(path.resolve(__dirname, 'config', '*.ts'))

const app = await NestFactory.create(AppModule, { cors: true });
app.useGlobalFilters(new HttpExceptionFilter(ConfigService));
await app.listen(3000);

代码语言:javascript
复制
const app = await NestFactory.create(AppModule, {cors: true});
const config = app.get<ConfigService>(ConfigService);
app.useGlobalFilters(new HttpExceptionFilter(config));
await app.listen(3000);

这取决于您的AppModule如下所示

代码语言:javascript
复制
@Module({
    imports: [ConfigModule.load(path.resolve(__dirname, 'config', '*.ts')],
})
export AppModule {}

或者像这样:

代码语言:javascript
复制
const app = await NestFactory.create(AppModule, {cors: true});
const httpExceptionFilter = app.get(HttpExpectionFilter);
app.useGlobalFilters(httpExpectionFilter);
票数 2
EN

Stack Overflow用户

发布于 2018-09-26 07:30:14

通过调用ConfigService解决了这个问题,方法如下:

代码语言:javascript
复制
export class HttpExceptionFilter implements ExceptionFilter {

  constructor(private readonly config: ConfigService) {
    this.config = ConfigService.get('errors');
  }
  catch(exception: HttpException, host: ArgumentsHost) {
    // some code here that calls this.config
  }
}
票数 1
EN

Stack Overflow用户

发布于 2021-07-18 16:44:53

对于Nestjs V8,您可以将其放在AppModule提供程序中:

代码语言:javascript
复制
{
  provide: APP_FILTER,
  useClass: HttpExceptionFilter,
},
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52457899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档