NodeJS nestjs如何处理onApplicationBootstrap()中的错误

wr98u20j  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(140)

我在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方法?不仅在控制器。谢谢~!

ehxuflar

ehxuflar1#

你有两个选择:
您可以使用try/catch语句在本地实现错误处理,甚至可以构建一个错误处理服务,该服务接收错误并在必要时对其进行管理

你可以实现一个process.on('unhandledRejection')process.on('uncaughtException')事件处理器,并以这种方式拥有一个统一的错误处理器。
这些错误发生在请求生命周期之外,这就是异常过滤器的作用。一般来说,这些方法应该是自包含的,并处理任何可能发生的错误。

相关问题