"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > Events in nestjs

Events in nestjs

Published on 2024-11-08
Browse:813

Eventos no nestjs

What are Events?

Events are signals or notifications that indicate that an action or change of state has occurred. In the context of applications, events allow different parts of the system to communicate in an asynchronous and decoupled way. This is especially useful in microservices architectures, where you need components to function independently but still be able to “listen” and react to changes happening elsewhere in the system.

Events in NestJS

In NestJS, implementing events is done in a simple and intuitive way using the EventEmitter2 library, which is an extension of the native Node.js EventEmitter, with more features. Next, let's see how to configure and use events in NestJS.

Configuring Events in NestJS

First, you need to install the @nestjs/event-emitter package, which offers complete integration of EventEmitter2 with NestJS:

npm install @nestjs/event-emitter

After installing the package, import the EventEmitterModule module into your application's main module:

import { Module } from '@nestjs/common';
import { EventEmitterModule } from '@nestjs/event-emitter';

@Module({
  imports: [
    EventEmitterModule.forRoot(), // Importando o EventEmitterModule
    // outros módulos
  ],
})
export class AppModule {}

With the module configured, you can start creating and handling events in your application.

Creating and Issuing Events

Let's create a basic example where an event is emitted when a new user is created.

1. Create an Event:

First, we define a class to represent our event:

export class UserCreatedEvent {
  constructor(
    public readonly userId: string,
    public readonly email: string,
  ) {}
}

2. Emitting the Event:

In the service where user creation logic is implemented, you can emit the event after the user is created:

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);
  }
}

Here the user.created event is emitted whenever a new user is created.

Listening and Responding to Events

To react to emitted events, you can create listeners, which are functions or methods that will be called when the corresponding event is triggered.

1. Creating a Listener:

A listener is a class that reacts to a specific event:

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. Registering the Listener:

For NestJS to recognize the listener, it must be registered in the corresponding module:

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserCreatedListener } from './listeners/user-created.listener';

@Module({
  providers: [UserService, UserCreatedListener],
})
export class UserModule {}

Now, every time the user.created event is emitted, the handleUserCreatedEvent method will be called.

Advanced Event Applications

Events can be used in various scenarios to improve application architecture:

  1. Integration with Microservices: Events are an efficient way of communicating between microservices, allowing them to remain decoupled.
  2. Asynchronous Processing: You can emit events to perform background operations, such as sending emails or processing large amounts of data.
  3. Logging and Auditing: Events are ideal for capturing user actions and system events for auditing purposes.

Conclusion

Using events in NestJS is a powerful way to create modular, scalable, and easy-to-maintain systems. Through integration with EventEmitter2, NestJS makes it easy to create, emit, and listen for events, allowing you to implement event-driven architectures simply and effectively. Whether for communication between microservices or for asynchronous processing, events are an essential tool in any NestJS developer's arsenal.

Release Statement This article is reproduced at: https://dev.to/rafael_avelarcampos_e71c/eventos-no-nestjs-131j?1 If there is any infringement, please contact [email protected] to delete it
Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3