비nestjs 이벤트

PHPz
풀어 주다: 2024-09-04 22:42:18
원래의
1148명이 탐색했습니다.

Eventos no nestjs

이벤트란 무엇인가요?

이벤트는 작업이나 상태 변경이 발생했음을 나타내는 신호 또는 알림입니다. 애플리케이션 컨텍스트에서 이벤트를 사용하면 시스템의 여러 부분이 비동기적이고 분리된 방식으로 통신할 수 있습니다. 이는 독립적으로 작동하는 구성 요소가 필요하지만 여전히 시스템의 다른 곳에서 발생하는 변경 사항을 "수신"하고 반응할 수 있는 마이크로서비스 아키텍처에 특히 유용합니다.

NestJS의 이벤트

NestJS에서는 더 많은 기능을 갖춘 기본 Node.js EventEmitter의 확장인 EventEmitter2 라이브러리를 사용하여 간단하고 직관적인 방식으로 이벤트 구현이 수행됩니다. 다음으로 NestJS에서 이벤트를 구성하고 사용하는 방법을 살펴보겠습니다.

NestJS에서 이벤트 구성

먼저 EventEmitter2와 NestJS의 완전한 통합을 제공하는 @nestjs/event-emitter 패키지를 설치해야 합니다.

npm install @nestjs/event-emitter
로그인 후 복사

패키지를 설치한 후 EventEmitterModule 모듈을 애플리케이션의 기본 모듈로 가져옵니다.

import { Module } from '@nestjs/common';
import { EventEmitterModule } from '@nestjs/event-emitter';

@Module({
  imports: [
    EventEmitterModule.forRoot(), // Importando o EventEmitterModule
    // outros módulos
  ],
})
export class AppModule {}
로그인 후 복사

모듈을 구성하면 애플리케이션에서 이벤트 생성 및 처리를 시작할 수 있습니다.

이벤트 생성 및 발행

새 사용자가 생성되면 이벤트가 발생하는 기본 예제를 만들어 보겠습니다.

1. 이벤트 만들기:

먼저 이벤트를 나타내는 클래스를 정의합니다.

export class UserCreatedEvent {
  constructor(
    public readonly userId: string,
    public readonly email: string,
  ) {}
}
로그인 후 복사

2. 이벤트 발행:

사용자 생성 로직이 구현된 서비스에서는 사용자가 생성된 후 이벤트를 내보낼 수 있습니다.

import { Injectable } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { UserCreatedEvent } from './events/user-created.event';

@Injectable()
export class UserService {
  constructor(private readonly eventEmitter: EventEmitter2) {}

  async createUser(email: string) {
    // Lógica para criar o usuário
    const userId = '12345'; // Exemplo de ID gerado

    // Emitir o evento
    const event = new UserCreatedEvent(userId, email);
    this.eventEmitter.emit('user.created', event);
  }
}
로그인 후 복사

여기서 user.created 이벤트는 새 사용자가 생성될 때마다 발생합니다.

이벤트 청취 및 응답

발생한 이벤트에 반응하려면 해당 이벤트가 트리거될 때 호출되는 함수 또는 메서드인 리스너를 생성할 수 있습니다.

1. 리스너 생성:

리스너는 특정 이벤트에 반응하는 클래스입니다.

import { OnEvent } from '@nestjs/event-emitter';
import { Injectable } from '@nestjs/common';
import { UserCreatedEvent } from './events/user-created.event';

@Injectable()
export class UserCreatedListener {
  @OnEvent('user.created')
  handleUserCreatedEvent(event: UserCreatedEvent) {
    console.log('Usuário criado com sucesso:', event.userId, event.email);
    // Lógica adicional, como enviar um e-mail de boas-vindas
  }
}
로그인 후 복사

2. 청취자 등록:

NestJS가 리스너를 인식하려면 해당 모듈에 등록되어 있어야 합니다.

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserCreatedListener } from './listeners/user-created.listener';

@Module({
  providers: [UserService, UserCreatedListener],
})
export class UserModule {}
로그인 후 복사

이제 user.created 이벤트가 발생할 때마다 handlerUserCreatedEvent 메소드가 호출됩니다.

고급 이벤트 신청

애플리케이션 아키텍처를 개선하기 위해 다양한 시나리오에서 이벤트를 사용할 수 있습니다.

  1. 마이크로서비스와의 통합: 이벤트는 마이크로서비스 간의 효율적인 통신 방법으로, 마이크로서비스를 분리된 상태로 유지할 수 있습니다.
  2. 비동기 처리: 이벤트를 발생시켜 이메일 보내기, 대용량 데이터 처리 등 백그라운드 작업을 수행할 수 있습니다.
  3. 로깅 및 감사: 이벤트는 감사 목적으로 사용자 작업과 시스템 이벤트를 캡처하는 데 이상적입니다.

결론

NestJS에서 이벤트를 사용하는 것은 모듈식이며 확장 가능하고 유지 관리가 쉬운 시스템을 만드는 강력한 방법입니다. EventEmitter2와의 통합을 통해 NestJS를 사용하면 이벤트를 쉽게 생성, 방출 및 수신할 수 있으므로 이벤트 기반 아키텍처를 간단하고 효과적으로 구현할 수 있습니다. 마이크로서비스 간의 통신이든 비동기 처리이든 이벤트는 NestJS 개발자의 무기고에 필수적인 도구입니다.

위 내용은 비nestjs 이벤트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!