我正在尝试使用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;
}
我想捕获异常来管理结果,而不是退出流程。
答案 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()
。