我在onApplicationBootstrap()中运行了一个@Injectable TowerService方法
@Injectable()
export class TasksService implements OnApplicationBootstrap {
private readonly logger = new Logger(TasksService.name)
constructor(private towerService: TowerService) {}
onApplicationBootstrap() {
this.towerService.sendTowerJob()
}
}
在TowerService中,sendTowerJob()方法抛出异常
async sendTowerJob() {
throw new HttpException(`error`, 500)
}
我尝试过使用Filter或Interceptor来全局处理错误,但我发现只有当服务方法在Controller中运行时,错误才会被全局处理。在onApplicationBootstrap()或一些Cron方法中运行时,它不会被全局处理(就像下面一样)。
@Injectable()
export class TasksService implements OnApplicationBootstrap {
private readonly logger = new Logger(TasksService.name)
constructor(private towerService: TowerService) {}
onApplicationBootstrap() {
this.towerService.sendTowerJob() // filter and interceptor will not handle error in this method
}
@Cron(CronExpression.EVERY_5_SECONDS)
async handleCron() {
this.towerService.sendTowerJob() // filter and interceptor will not handle error in this method
}
}
@Controller('tower')
export class TowerController {
constructor(private readonly towerService: TowerService) {}
@Get()
async test() {
this.towerService.sendTowerJob() // filter and interceptor will handle error in this method
}
}
那么我如何在一些方法中全局处理错误,比如onApplicationBootstrap()或Cron方法?不仅在控制器。谢谢~!
1条答案
按热度按时间ehxuflar1#
你有两个选择:
您可以使用
try/catch
语句在本地实现错误处理,甚至可以构建一个错误处理服务,该服务接收错误并在必要时对其进行管理或
你可以实现一个
process.on('unhandledRejection')
和process.on('uncaughtException')
事件处理器,并以这种方式拥有一个统一的错误处理器。这些错误发生在请求生命周期之外,这就是异常过滤器的作用。一般来说,这些方法应该是自包含的,并处理任何可能发生的错误。