Nest 生命周期
2025年3月5日...大约 1 分钟
Nest 生命周期
onModuleInit
onModuleInit
会在该模块的依赖项目处理完毕时调用。
要使用 onModuleInit
,需要实现 OnModuleInit
接口。
支持异步。
import { Module, OnModuleInit } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements OnModuleInit {
onModuleInit(): void {
console.log("The module has been initialized.");
}
}
onApplicationBootstrap
onApplicationBootstrap
会在所有模块初始化后调用,但在监听连接之前调用。
要使用 onApplicationBootstrap
,需要实现 OnApplicationBootstrap
接口。
支持异步。
import { Module, OnApplicationBootstrap } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements OnApplicationBootstrap {
onApplicationBootstrap(): void {
console.log("bootstrap");
}
}
onModuleDestroy
onModuleDestroy
会在收到关闭信号时调用。
要使用 onModuleDestroy
,需要实现 OnModuleDestroy
接口。
import { Module, OnModuleDestroy } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements OnModuleDestroy {
onModuleDestroy(): void {
console.log("destroy");
}
}
beforeApplicationShutdown
beforeApplicationShutdown
会在所有 onModuleDestroy
钩子执行完毕后调用 (Promise
解决或拒绝),一旦完成 (Promise
解决或拒绝),所有的连接将被关闭 (调用 app.close()
)。
要使用 beforeApplicationShutdown
,需要实现 BeforeApplicationShutdown
接口。
import { BeforeApplicationShutdown, Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements BeforeApplicationShutdown {
beforeApplicationShutdown(): void {
console.log("beforeApplicationShutdown");
}
}
onApplicationShutdown
onApplicationShutdown
会在连接关闭后调用。
要使用 onApplicationShutdown
,需要实现 OnApplicationShutdown
接口。
import { Module, OnApplicationShutdown } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements OnApplicationShutdown {
onApplicationShutdown(): void {
console.log("onApplicationShutdown");
}
}
关于应用关闭
onModuleDestroy
、beforeApplicationShutdown
、onApplicationShutdown
钩子在应用关闭时都会被调用。这些钩子监听器会消耗系统资源,因此默认情况下它们是禁用的。要使用关闭钩子,必须启动监听器。
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableShutdownHooks();
await app.listen(3000);
}
bootstrap();