Was sind Ereignisse?
Ereignisse sind Signale oder Benachrichtigungen, die darauf hinweisen, dass eine Aktion oder Zustandsänderung stattgefunden hat. Im Kontext von Anwendungen ermöglichen Ereignisse die asynchrone und entkoppelte Kommunikation verschiedener Teile des Systems. Dies ist besonders nützlich in Microservices-Architekturen, in denen Sie Komponenten benötigen, die unabhängig funktionieren, aber dennoch in der Lage sind, Änderungen an anderer Stelle im System zu „hören“ und darauf zu reagieren.
Ereignisse in NestJS
In NestJS erfolgt die Implementierung von Ereignissen auf einfache und intuitive Weise mithilfe der EventEmitter2-Bibliothek, die eine Erweiterung des nativen Node.js EventEmitter mit mehr Funktionen ist. Als Nächstes sehen wir uns an, wie Ereignisse in NestJS konfiguriert und verwendet werden.
Konfigurieren von Ereignissen in NestJS
Zuerst müssen Sie das Paket @nestjs/event-emitter installieren, das eine vollständige Integration von EventEmitter2 mit NestJS bietet:
npm install @nestjs/event-emitter
Importieren Sie nach der Installation des Pakets das EventEmitterModule-Modul in das Hauptmodul Ihrer Anwendung:
import { Module } from '@nestjs/common'; import { EventEmitterModule } from '@nestjs/event-emitter'; @Module({ imports: [ EventEmitterModule.forRoot(), // Importando o EventEmitterModule // outros módulos ], }) export class AppModule {}
Sobald das Modul konfiguriert ist, können Sie mit der Erstellung und Verarbeitung von Ereignissen in Ihrer Anwendung beginnen.
Ereignisse erstellen und ausgeben
Lassen Sie uns ein einfaches Beispiel erstellen, bei dem ein Ereignis ausgegeben wird, wenn ein neuer Benutzer erstellt wird.
1. Erstellen Sie ein Ereignis:
Zuerst definieren wir eine Klasse zur Darstellung unseres Ereignisses:
export class UserCreatedEvent { constructor( public readonly userId: string, public readonly email: string, ) {} }
2. Ausgeben des Ereignisses:
In dem Dienst, in dem die Benutzererstellungslogik implementiert ist, können Sie das Ereignis ausgeben, nachdem der Benutzer erstellt wurde:
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); } }
Hier wird das user.created-Ereignis immer dann ausgegeben, wenn ein neuer Benutzer erstellt wird.
Zuhören und auf Ereignisse reagieren
Um auf ausgegebene Ereignisse zu reagieren, können Sie Listener erstellen. Dabei handelt es sich um Funktionen oder Methoden, die aufgerufen werden, wenn das entsprechende Ereignis ausgelöst wird.
1. Erstellen eines Listeners:
Ein Listener ist eine Klasse, die auf ein bestimmtes Ereignis reagiert:
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. Registrierung des Listeners:
Damit NestJS den Listener erkennt, muss er im entsprechenden Modul registriert werden:
import { Module } from '@nestjs/common'; import { UserService } from './user.service'; import { UserCreatedListener } from './listeners/user-created.listener'; @Module({ providers: [UserService, UserCreatedListener], }) export class UserModule {}
Jetzt wird jedes Mal, wenn das Ereignis „user.created“ ausgegeben wird, die Methode „handleUserCreatedEvent“ aufgerufen.
Erweiterte Event-Anwendungen
Ereignisse können in verschiedenen Szenarien verwendet werden, um die Anwendungsarchitektur zu verbessern:
Abschluss
Die Verwendung von Ereignissen in NestJS ist eine leistungsstarke Möglichkeit, modulare, skalierbare und einfach zu wartende Systeme zu erstellen. Durch die Integration mit EventEmitter2 erleichtert NestJS das Erstellen, Senden und Abhören von Ereignissen, sodass Sie ereignisgesteuerte Architekturen einfach und effektiv implementieren können. Ob für die Kommunikation zwischen Microservices oder für die asynchrone Verarbeitung, Ereignisse sind ein wesentliches Werkzeug im Arsenal jedes NestJS-Entwicklers.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3