イベントとは何ですか?
イベントは、アクションまたは状態の変化が発生したことを示す信号または通知です。アプリケーションのコンテキストでは、イベントにより、システムのさまざまな部分が非同期かつ分離された方法で通信できるようになります。これは、コンポーネントが独立して機能しながらも、システム内の他の場所で発生する変更を「リッスン」して反応できる必要があるマイクロサービス アーキテクチャで特に役立ちます。
NestJS のイベント
NestJS では、イベントの実装は、ネイティブ Node.js EventEmitter の拡張機能であり、より多くの機能を備えた EventEmitter2 ライブラリを使用して、シンプルかつ直感的な方法で行われます。次に、NestJS でイベントを構成して使用する方法を見てみましょう。
NestJS でのイベントの構成
まず、@nestjs/event-emitter パッケージをインストールする必要があります。これにより、EventEmitter2 と NestJS が完全に統合されます。
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 イベントが発行されるたびに、handleUserCreatedEvent メソッドが呼び出されます。
高度なイベント アプリケーション
イベントは、アプリケーション アーキテクチャを改善するためにさまざまなシナリオで使用できます:
結論
NestJS でイベントを使用することは、モジュール式でスケーラブルで保守が容易なシステムを作成する強力な方法です。 EventEmitter2 との統合により、NestJS はイベントの作成、発行、リッスンを容易にし、イベント駆動型のアーキテクチャをシンプルかつ効果的に実装できるようにします。マイクロサービス間の通信であれ、非同期処理であれ、イベントは NestJS 開発者の武器庫に不可欠なツールです。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3