「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > nesjs のイベント

nesjs のイベント

2024 年 11 月 8 日に公開
ブラウズ:113

Eventos no nestjs

イベントとは何ですか?

イベントは、アクションまたは状態の変化が発生したことを示す信号または通知です。アプリケーションのコンテキストでは、イベントにより、システムのさまざまな部分が非同期かつ分離された方法で通信できるようになります。これは、コンポーネントが独立して機能しながらも、システム内の他の場所で発生する変更を「リッスン」して反応できる必要があるマイクロサービス アーキテクチャで特に役立ちます。

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 メソッドが呼び出されます。

高度なイベント アプリケーション

イベントは、アプリケーション アーキテクチャを改善するためにさまざまなシナリオで使用できます:

  1. マイクロサービスとの統合: イベントはマイクロサービス間で通信する効率的な方法であり、マイクロサービスを分離したままにすることができます。
  2. 非同期処理: イベントを発行して、電子メールの送信や大量のデータの処理などのバックグラウンド操作を実行できます。
  3. ログと監査: イベントは、監査目的でユーザー アクションやシステム イベントをキャプチャするのに最適です。

結論

NestJS でイベントを使用することは、モジュール式でスケーラブルで保守が容易なシステムを作成する強力な方法です。 EventEmitter2 との統合により、NestJS はイベントの作成、発行、リッスンを容易にし、イベント駆動型のアーキテクチャをシンプルかつ効果的に実装できるようにします。マイクロサービス間の通信であれ、非同期処理であれ、イベントは NestJS 開発者の武器庫に不可欠なツールです。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/rafael_avelarcampos_e71c/eventos-no-nestjs-131j?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3