Home  >  Article  >  Web Front-end  >  Non-nestjs events

Non-nestjs events

PHPz
PHPzOriginal
2024-09-04 22:42:181154browse

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

Firstly, 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 the main module of your application:

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. Issuing 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.

The above is the detailed content of Non-nestjs events. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn