Добавление слоя Pub/Sub к серверной части Express может добавить управляемую событиями возможность, которая сделает выполнение определенных операций более интуитивно понятным, а также обеспечит лучшее разделение кода.

Иногда нам может понадобиться выполнить некоторые действия или вызвать сторонние службы в результате события, происходящего в нашем приложении. Например, отправка приветственного электронного письма, приветственного смс или аналитических данных при регистрации нового пользователя, что очень распространено в большинстве приложений в наши дни.

Возьмем вышеупомянутый пример, когда мы отправляем электронную почту, sms и аналитические данные, когда пользователь регистрируется. Традиционно это можно сделать с помощью императивных вызовов функций, как показано в примере ниже.

Вы уже можете видеть, как будет выглядеть этот код, поскольку мы продолжаем добавлять новые действия, каждое действие будет добавлять еще один вызов императивной функции к зависимой службе, и функция будет продолжать увеличиваться в размере. Вы также можете видеть, что помимо того, что этот подход сложно поддерживать, он нарушает принцип единой ответственности, а также может повторяться в разных событиях, а не только в регистрации пользователей.

Публикация/Подуровень

Добавление слоя Pub/Sub может решить эту проблему, создав событие (пользователь, зарегистрированный с этим адресом электронной почты) и позволив отдельным прослушивателям выполнять работу.

Для этого мы будем использовать Излучатель событий Node.js.

Сначала мы создадим общий генератор событий, а также укажем необходимый набор событий.

Примечание. Из-за кэширования Node.jS всегда будет возвращаться один и тот же экземпляр eventEmitter (Singleton)

Теперь мы можем изменить наш код, чтобы генерировать «событие регистрации пользователя».

Теперь отдельные службы могут прослушивать события и выполнять свою работу, например EmailService.

Теперь все, что осталось, — это создать экземпляр ваших служб прослушивания событий при загрузке вашего экспресс-приложения для инициализации их слушателей, что-то вроде вызова этой функции при инициализации вашего приложения.

Вы уже видите, что добавление дополнительных действий не добавит никаких дополнительных строк кода в функцию регистрации пользователей, которая обеспечивает разделение кода и использует управляемую событиями природу Node.js.

Первоначально опубликовано на https://dev.to 10 декабря 2020 г.