什么是活动?
事件是指示已发生操作或状态更改的信号或通知。在应用程序的上下文中,事件允许系统的不同部分以异步和解耦的方式进行通信。这在微服务架构中特别有用,在微服务架构中,您需要组件独立运行,但仍然能够“监听”并对系统其他地方发生的变化做出反应。
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 开发人员的必备工具。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3