Добавление слоя Pub/Sub к серверной части Express может добавить управляемую событиями возможность, которая сделает выполнение определенных операций более интуитивно понятным, а также обеспечит лучшее разделение кода.
Иногда нам может понадобиться выполнить некоторые действия или вызвать сторонние службы в результате события, происходящего в нашем приложении. Например, отправка приветственного электронного письма, приветственного смс или аналитических данных при регистрации нового пользователя, что очень распространено в большинстве приложений в наши дни.
Возьмем вышеупомянутый пример, когда мы отправляем электронную почту, sms и аналитические данные, когда пользователь регистрируется. Традиционно это можно сделать с помощью императивных вызовов функций, как показано в примере ниже.
Вы уже можете видеть, как будет выглядеть этот код, поскольку мы продолжаем добавлять новые действия, каждое действие будет добавлять еще один вызов императивной функции к зависимой службе, и функция будет продолжать увеличиваться в размере. Вы также можете видеть, что помимо того, что этот подход сложно поддерживать, он нарушает принцип единой ответственности, а также может повторяться в разных событиях, а не только в регистрации пользователей.
Публикация/Подуровень
Добавление слоя Pub/Sub может решить эту проблему, создав событие (пользователь, зарегистрированный с этим адресом электронной почты) и позволив отдельным прослушивателям выполнять работу.
Для этого мы будем использовать Излучатель событий Node.js.
Сначала мы создадим общий генератор событий, а также укажем необходимый набор событий.
Примечание. Из-за кэширования Node.jS всегда будет возвращаться один и тот же экземпляр eventEmitter (Singleton)
Теперь мы можем изменить наш код, чтобы генерировать «событие регистрации пользователя».
Теперь отдельные службы могут прослушивать события и выполнять свою работу, например EmailService.
Теперь все, что осталось, — это создать экземпляр ваших служб прослушивания событий при загрузке вашего экспресс-приложения для инициализации их слушателей, что-то вроде вызова этой функции при инициализации вашего приложения.
Вы уже видите, что добавление дополнительных действий не добавит никаких дополнительных строк кода в функцию регистрации пользователей, которая обеспечивает разделение кода и использует управляемую событиями природу Node.js.
Первоначально опубликовано на https://dev.to 10 декабря 2020 г.