O que são Eventos?
Eventos são sinais ou notificações que indicam que uma ação ou mudança de estado ocorreu. No contexto de aplicações, eventos permitem que diferentes partes do sistema se comuniquem de maneira assíncrona e desacoplada. Isso é especialmente útil em arquiteturas de microserviços, onde você precisa que os componentes funcionem de forma independente, mas que ainda possam “ouvir” e reagir a mudanças que acontecem em outras partes do sistema.
Eventos no NestJS
No NestJS, a implementação de eventos é feita de maneira simples e intuitiva utilizando a biblioteca EventEmitter2, que é uma extensão do EventEmitter nativo do Node.js, com mais funcionalidades. A seguir, vamos ver como configurar e utilizar eventos no NestJS.
Configurando Eventos no NestJS
Primeiramente, você precisa instalar o pacote @nestjs/event-emitter, que oferece uma integração completa do EventEmitter2 com o NestJS:
npm install @nestjs/event-emitter
Depois de instalar o pacote, importe o módulo EventEmitterModule no módulo principal da sua aplicação:
import { Module } from '@nestjs/common'; import { EventEmitterModule } from '@nestjs/event-emitter'; @Module({ imports: [ EventEmitterModule.forRoot(), // Importando o EventEmitterModule // outros módulos ], }) export class AppModule {}
Com o módulo configurado, você pode começar a criar e manipular eventos na sua aplicação.
Criando e Emitindo Eventos
Vamos criar um exemplo básico onde um evento é emitido quando um novo usuário é criado.
1. Criar um Evento:
Primeiro, definimos uma classe para representar nosso evento:
export class UserCreatedEvent { constructor( public readonly userId: string, public readonly email: string, ) {} }
2. Emitindo o Evento:
No serviço onde a lógica de criação de usuário está implementada, você pode emitir o evento após o usuário ser criado:
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); } }
Aqui, o evento user.created é emitido sempre que um novo usuário é criado.
Ouvindo e Respondendo a Eventos
Para reagir a eventos emitidos, você pode criar listeners, que são funções ou métodos que serão chamados quando o evento correspondente for disparado.
1. Criando um Listener:
Um listener é uma classe que reage a um evento específico:
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. Registrando o Listener:
Para que o NestJS reconheça o listener, ele deve ser registrado no módulo correspondente:
import { Module } from '@nestjs/common'; import { UserService } from './user.service'; import { UserCreatedListener } from './listeners/user-created.listener'; @Module({ providers: [UserService, UserCreatedListener], }) export class UserModule {}
Agora, toda vez que o evento user.created for emitido, o método handleUserCreatedEvent será chamado.
Aplicações Avançadas de Eventos
Eventos podem ser usados em vários cenários para melhorar a arquitetura da aplicação:
Conclusão
O uso de eventos no NestJS é uma maneira poderosa de criar sistemas modulares, escaláveis e fáceis de manter. Através da integração com o EventEmitter2, o NestJS facilita a criação, emissão e escuta de eventos, permitindo que você implemente arquiteturas orientadas a eventos de forma simples e eficaz. Seja para comunicação entre microserviços ou para processamento assíncrono, eventos são uma ferramenta essencial no arsenal de qualquer desenvolvedor NestJS.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3