Lifecycle Events

Lifecycle Events

모든 응용 프로그램 요소에는 Nest에서 관리하는 수명주기가 있습니다. Nest는 수명 후크를 제공하여 주요 수명 순간에 대한 가시성과 발생시 행동 할 수있는 기능을 제공합니다.

Lifecycle sequence

생성자를 호출하여 인젝터블/컨트롤러를 생성한 후 Nest는 특정 순간에 다음 순서로 라이프 사이클 후크 메소드를 호출합니다.

OnModuleInit

호스트 모듈이 초기화되면 호출

OnApplicationBootstrap

응용 프로그램이 완전히 시작되고 부트 스트랩되면 호출됩니다.

OnModuleDestroy

Nest가 호스트 모듈을 파괴하기 직전에 정리 (app.close()메소드가 평가되었습니다)

OnApplicationShutdown

시스템 신호에 응답합니다 (예:SIGTERM에 의해 응용 프로그램이 종료된 경우)

Usage

각 수명주기 후크는 인터페이스로 표시됩니다. 인터페이스는 TypeScript 컴파일 후에는 존재하지 않기 때문에 기술적으로 선택 사항입니다. 그럼에도 불구하고 강력한 타이핑 및 편집기 툴링의 이점을 얻으려면 사용하는 것이 좋습니다.

@@filename()
import { Injectable, OnModuleInit } from '@nestjs/common';

@Injectable()
export class UsersService implements OnModuleInit {
  onModuleInit() {
    console.log(`The module has been initialized.`);
  }
}
@@switch
import { Injectable } from '@nestjs/common';

@Injectable()
export class UsersService {
  onModuleInit() {
    console.log(`The module has been initialized.`);
  }
}

또한 OnModuleInitOnApplicationBootstrap후크를 사용하면 응용 프로그램 초기화 프로세스를 연기할 수 있습니다 ( Promise를 반환하거나 메소드를 async로 표시).

@@filename()
async onModuleInit(): Promise<void> {
  await this.fetch();
}
@@switch
async onModuleInit() {
  await this.fetch();
}

OnApplicationShutdown

OnApplicationShutdown은 시스템 신호에 응답합니다 (예: SIGTERM에 의해 어플리케이션이 종료 될 때). 이 후크를 사용하여 Nest 애플리케이션을 정상적으로 종료하십시오. 이 기능은 종종 Kubernetes, Heroku 또는 유사한 서비스와 함께 사용됩니다.

이 후크를 사용하려면 종료 신호를 수신하는 리스너를 활성화해야합니다.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // Starts listening to shutdown hooks
  app.enableShutdownHooks();
  await app.listen(3000);
}
bootstrap();

응용 프로그램이 신호를 수신하면 해당 신호를 첫 번째 매개 변수로 사용하여 InjectableonApplicationShutdown기능을 호출합니다. 함수가 약속을 반환하면 약속이 해결되거나 거부 될 때까지 Nest 응용 프로그램이 종료되지 않습니다.

@@filename()
@Injectable()
class UsersService implements OnApplicationShutdown {
  onApplicationShutdown(signal: string) {
    console.log(signal); // e.g. "SIGINT"
  }
}
@@switch
@Injectable()
class UsersService implements OnApplicationShutdown {
  onApplicationShutdown(signal) {
    console.log(signal); // e.g. "SIGINT"
  }
}

Last updated