Введение в события в Nest
После записи новой строки в память часто нужен ещё один шаг: отметка в журнале, счётчик или короткое уведомление. Если всё держать в одном методе, логика разрастается, а повторное использование того же шага с другого адреса превращается в копирование.
Сервис может сообщить о факте сохранения через событие: он заканчивает основную работу и передаёт сигнал шине приложения. Отдельные классы подписываются на такой сигнал и выполняют свой код, не зная, кто именно инициировал запись.
В Nest для этого подключают пакет
@nestjs/event-emitter.
Корневой модуль импортирует
EventEmitterModule.forRoot,
сервис получает общий эмиттер
и публикует сигнал после успешного
сохранения в массиве или другой
структуре в памяти. Слушатели
регистрируют как провайдеры
и помечают метод, который должен
сработать при совпадении имени
сигнала.
Такой приём не требует базы и очередей: всё происходит внутри процесса NodeJS, пока живёт приложение. Он не заменяет слушатели сущностей TypeORM вокруг SQL, а дополняет сервисный слой, когда побочный шаг нужен после бизнес-операции в коде приложения.
Дальше разберём публикацию после сохранения, отдельный класс слушателя, передачу объекта с полями, несколько реакций на один сигнал и метод слушателя, который не задерживает ответ страницы.