Что такое события?
События — это сигналы или уведомления, указывающие на то, что произошло действие или изменение состояния. В контексте приложений события позволяют различным частям системы взаимодействовать асинхронно и раздельно. Это особенно полезно в архитектурах микросервисов, где вам нужно, чтобы компоненты функционировали независимо, но при этом были в состоянии «слушать» и реагировать на изменения, происходящие в других частях системы.
События в 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