eventemitter2 패키지를 사용$ npm i --save @nestjs/event-emitter
import { Module } from '@nestjs/common';
import { EventEmitterModule } from '@nestjs/event-emitter';
@Module({
imports: [
EventEmitterModule.forRoot()
],
})
export class AppModule {}
EventEmitterModule.forRoot({
// 와일드카드를 사용하려면 `true`로 설정
wildcard: false,
// 네임스페이스를 구분하는 데 사용되는 구분자
delimiter: '.',
// newListener 이벤트를 방출하려면 `true`로 설정
newListener: false,
// removeListener 이벤트를 방출하려면 `true`로 설정
removeListener: false,
// 이벤트에 할당할 수 있는 최대 리스너 수
maxListeners: 10,
// 최대 리스너 수를 초과할 때 메모리 누수 메시지에 이벤트 이름 표시
verboseMemoryLeak: false,
// 오류 이벤트가 방출되고 리스너가 없을 때 uncaughtException을 비활성화
ignoreErrors: false,
});
EventEmitter2를 constructor에 주입constructor(private eventEmitter: EventEmitter2) {}
this.eventEmitter.emit(
'order.created',
new OrderCreatedEvent({
orderId: 1,
payload: {},
}),
);
@OnEvent() 데코레이터를 메서드 정의 앞에 추가하여 이벤트 리스너 선언import { OnEvent } from '@nestjs/event-emitter';
@OnEvent('order.created')
handleOrderCreatedEvent(payload: OrderCreatedEvent) {
// "OrderCreatedEvent" 이벤트를 처리 및 처리
console.log('order.created 이벤트 발생!')
}
EventEmitterModule.forRoot() 메서드에 와일드 카드 옵션을 전달하면, 네입스페이스/와일드 카드를 사용할 수 있다.EventEmitterModule.forRoot({
// 와일드카드를 사용하려면 `true`로 설정
wildcard: true,
});
// order. 로 시작하는 이벤트를 수집
@OnEvent('order.*')
handleOrderEvents(payload: OrderCreatedEvent | OrderRemovedEvent | OrderUpdatedEvent) {
// 이벤트를 처리 및 처리
}
// 모든 이벤트를 수집
@OnEvent('**')
handleEverything(payload: any) {
// 이벤트를 처리 및 처리
}
References
Documentation | NestJS - A progressive Node.js framework