Nest.js 优雅关闭

mut*_*gan 8 node.js nestjs

我在引导函数中启用了关闭挂钩。我还在我的模块之一订阅了应用程序关闭挂钩:

public async onApplicationShutdown(signal): Promise<void>
{
   console.log({signal});
   ...
}
Run Code Online (Sandbox Code Playgroud)

现在我可以Ctrl+C在终端上按下并阅读一条很棒的消息。然后我的资源释放工作正常。

如果数据库连接失败,我也想关闭我的应用程序:

export class MyDbAccessImplementation {
   constructor() {
      this._pool = createPool(some);
      this._pool.query(`SELECT 'test' AS TEST`, (err) => {
         if (err !== null) {
            console.error(err);
            process.emit('SIGINT');
         }
      });
   }
}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我的 onApplicationShutdown 方法不会因数据库连接错误而触发,并且应用程序会立即关闭。

如何从其组件触发 Nest.js 应用程序关闭?

JP *_*rre 12

我相信您的问题可能是您的 NestJS 实例没有侦听关闭事件。您需要在app.enableShutdownHooks()引导程序中启用该行为。

这是来自他们的生命周期事件指南:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // Starts listening for shutdown hooks
  app.enableShutdownHooks();

  await app.listen(3000);
}
Run Code Online (Sandbox Code Playgroud)