是否可以在exceptions-zone.ts中覆盖DEFAULT_TEARDOWN函数?

时间:2019-06-16 11:51:19

标签: nestjs

我正在尝试使用NestJS框架创建一个应用程序,我想检查特定的Service是否在应用程序上下文中,但是当框架默认行为不在内部找到Service时,该框架的默认行为正在退出该过程上下文。

我已经用try ... catch包围了get方法,但是由于process.exit(1)执行,它无法正常工作。

private async loadConfigService(server: INestApplication): Promise<void> {
    try {
      this.configService = await server.get<ConfigService>(ConfigService, { strict: false });
    } catch (error) {
      this.logger.debug('Server does not have a config module loaded. Loading defaults...');
    }
    this.port = this.configService ? this.configService.port : DEFAULT_PORT;
    this.environment = this.configService ? this.configService.environment : Environment[process.env.NODE_ENV] || Environment.DEVELOPMENT;
    this.isProduction = this.configService ? this.configService.isProduction : false;
  }

我想捕获异常来管理结果,而不是退出流程。

2 个答案:

答案 0 :(得分:1)

这是我想出的:

import { NestFactory } from '@nestjs/core';

export class CustomNestFactory {
  constructor() {}

  public static create(module, serverOrOptions, options) {
    const ob = NestFactory as any;
    ob.__proto__.createExceptionZone = (receiver, prop) => {
      return (...args) => {
        const result = receiver[prop](...args);
        return result;
      };
    };
    return NestFactory.create(module, serverOrOptions, options);
  }
}

现在,我可以使用CustomNestFactory代替默认的NestFactory

肮脏,但是有效

答案 1 :(得分:0)

这是我的代码来解决同一问题:

import { ExceptiinsZone } from '@nestjs/core/errors/exceptions-zone';

ExceptionsZone.run = callback => {
  try {
    callback();
  } catch (e) {
    ExceptionsZone.exceptionHandler.handle(e);
    throw e;
  }
};

对于其他方法,您可能还需要覆盖asyncRun()