首页 web前端 js教程 非 Nestjs 事件

非 Nestjs 事件

Sep 04, 2024 pm 10:42 PM

Eventos no nestjs

什么是活动?

事件是指示已发生操作或状态更改的信号或通知。在应用程序的上下文中,事件允许系统的不同部分以异步和解耦的方式进行通信。这在微服务架构中特别有用,在微服务架构中,您需要组件独立工作,但仍然能够“监听”并对系统其他地方发生的变化做出反应。

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 方法都会被调用。

高级活动应用程序

事件可以在各种场景中使用,以改进应用程序架构:

  1. 与微服务集成:事件是微服务之间通信的有效方式,使它们保持解耦。
  2. 异步处理:您可以发出事件来执行后台操作,例如发送电子邮件或处理大量数据。
  3. 日志记录和审核:事件非常适合捕获用户操作和系统事件以进行审核。

结论

在 NestJS 中使用事件是创建模块化、可扩展且易于维护的系统的强大方法。通过与 EventEmitter2 集成,NestJS 可以轻松创建、发出和侦听事件,使您能够简单有效地实现事件驱动架构。无论是微服务之间的通信还是异步处理,事件都是任何 NestJS 开发人员的必备工具。

以上是非 Nestjs 事件的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Stock Market GPT

Stock Market GPT

人工智能驱动投资研究,做出更明智的决策

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

您如何通过JavaScript中的数据属性选择元素? 您如何通过JavaScript中的数据属性选择元素? Aug 30, 2025 am 01:57 AM

你可以通过CSS属性选择器在JavaScript中选择带有data属性的元素,使用document.querySelector()或document.querySelectorAll()方法即可实现。1.使用[data-attribute]选择具有指定data属性(任意值)的元素;2.使用[data-attribute="value"]选择属性值完全匹配的元素;3.通过element.dataset访问数据属性,其中data-user-id对应dataset.userId(转

构建按工作日和工作时间运行的JavaScript计数器 构建按工作日和工作时间运行的JavaScript计数器 Aug 31, 2025 am 06:30 AM

本文详细介绍了如何使用JavaScript构建一个精确的定时计数器。该计数器每分钟递增一次,但仅在预设的工作日(周一至周五)和工作时间(如上午6点至晚上8点)内运行。它能在非工作时间暂停递增但显示当前值,并在每月的第一天自动重置,确保计数逻辑的准确性和灵活性。

Pytest与Selenium:动态数据驱动测试的实现策略 Pytest与Selenium:动态数据驱动测试的实现策略 Aug 30, 2025 am 06:00 AM

本文旨在解决使用Pytest和Selenium进行动态数据驱动测试时,@pytest.mark.parametrize装饰器无法直接处理运行时生成数据的问题。我们将深入探讨pytest.mark.parametrize的限制,并详细介绍如何通过Pytest的pytest_generate_tests钩子函数,优雅地实现基于Selenium动态获取数据的参数化测试,确保测试用例的灵活性和高效性。

优化jQuery弹窗中动态外部链接跳转的事件处理 优化jQuery弹窗中动态外部链接跳转的事件处理 Sep 01, 2025 am 11:48 AM

本文旨在解决jQuery弹窗中外部链接重定向按钮重复绑定事件处理器导致跳转错误的问题。当用户连续点击多个外部链接时,弹窗中的跳转按钮可能始终指向首次点击的链接。核心解决方案是利用off('click')方法在每次绑定新事件前解除旧的事件处理器,确保跳转行为始终指向最新的目标URL,从而实现准确且可控的链接重定向。

JavaScript实现点击图片切换效果:专业教程 JavaScript实现点击图片切换效果:专业教程 Sep 18, 2025 pm 01:03 PM

本文将介绍如何使用JavaScript实现点击图片切换的效果。核心思路是利用HTML5的data-*属性存储备用图片路径,并通过JavaScript监听点击事件,动态切换src属性,从而实现图片切换。本文将提供详细的代码示例和解释,帮助你理解和掌握这种常用的交互效果。

动态创建的DOM元素如何被预先加载的脚本访问和操作 动态创建的DOM元素如何被预先加载的脚本访问和操作 Aug 30, 2025 am 11:57 AM

本文探讨了在Web开发中,当JavaScript脚本在DOM元素创建之前加载并执行时,如何有效访问和操作这些动态生成的元素。我们将介绍三种核心策略:通过函数返回值直接传递元素引用、利用自定义事件实现模块间通信,以及使用MutationObserver监听DOM结构变化。这些方法能够帮助开发者解决JavaScript执行时序与动态内容加载之间的挑战,确保脚本能正确地对后续添加的元素进行操作,如使其可拖拽。

如何在JavaScript中更新对象属性 如何在JavaScript中更新对象属性 Sep 04, 2025 am 04:58 AM

useednotationToupdateDatePropertiesWithNames; 2.SuseBrackEtnotationFordyNocorspecialCharacterPropertynames; 3.UseObject.assign.assign.assign()toupdatemultpropertiesormergeobjects

JavaScript的演变:ES2023及以后 JavaScript的演变:ES2023及以后 Aug 29, 2025 am 12:18 AM

ES2023引入了多项实用更新,标志着JavaScript的成熟演进。1.Array.prototype.findLast()和findLastIndex()方法支持从数组末尾搜索,提升处理日志或配置等场景的效率;2.Hashbang语法(#!/usr/bin/envnode)使JavaScript文件可在Unix-like系统中直接执行;3.Error.cause支持错误链,增强异常调试能力;4.WeakMaps和Sets的规范改进提高了跨引擎一致性;未来,装饰器(Stage3)、记录与元组(

See all articles