Skip to content

应用生命周期

使用应用生命周期

ts
// src/app.service.ts

import {
  Injectable,
  OnModuleInit,
  OnApplicationBootstrap,
  OnModuleDestroy,
  BeforeApplicationShutdown,
  OnApplicationShutdown,
} from '@nestjs/common';

@Injectable()
export class AppService
  implements
    OnModuleInit,
    OnApplicationBootstrap,
    OnModuleDestroy,
    BeforeApplicationShutdown,
    OnApplicationShutdown
{
  getHello(): any {
    return {
      data: {
        message: 'Hello World',
      },
    };
  }
  onModuleInit() {
    console.log('Module initialized');
    // 在这里执行模块初始化逻辑
  }
  onApplicationBootstrap() {
    console.log('Application bootstrapped');
    // 在这里执行应用启动后的逻辑
  }
  onModuleDestroy() {
    console.log('Module destroyed');
    // 在这里执行模块销毁前的清理逻辑
    // 触发条件:调用 app.close()、终端 Ctrl+C(SIGINT)、kill -15 <PID>(SIGTERM)、Docker STOP 信号等
  }
  beforeApplicationShutdown(signal: string) {
    console.log(`Received shutdown signal: ${signal}`);
    // 在这里执行应用关闭前的逻辑
  }
  onApplicationShutdown(signal: string) {
    console.log(`Application shutting down with signal: ${signal}`);
    // 在这里执行最终的清理逻辑
  }
}

测试

shell
# 开发环境启动
npm run start

# 打印结果:Module initialized
# 打印结果:Application bootstrapped