什麼是活動?
事件是指示已發生操作或狀態變更的訊號或通知。在應用程式的上下文中,事件允許系統的不同部分以非同步和解耦的方式進行通訊。這在微服務架構中特別有用,在微服務架構中,您需要元件獨立運行,但仍然能夠「監聽」並對系統其他地方發生的變化做出反應。
NestJS 中的活性
在 NestJS 中,使用 EventEmitter2 函式庫以簡單直覺的方式實作事件,該函式庫是原生 Node.js EventEmitter 的擴展,具有更多功能。接下來我們來看看如何在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 開發人員的必備工具。
以上是非 Nestjs 事件的詳細內容。更多資訊請關注PHP中文網其他相關文章!