Eventos Customizados em Node.js: Arquitetura Desacoplada com EventEmitter
O módulo nativo events do Node.js permite aplicar o padrão de projeto Observer para disparar e escutar eventos de forma assíncrona. Essa abordagem resolve o acoplamento excessivo no código, permitindo que diferentes partes da aplicação reajam a ações específicas sem dependerem diretamente umas das outras.
JavaScript
const EventEmitter = require('events');
// Instancia o emissor de eventos nativo do Node.js
const emissorDeEventos = new EventEmitter();
/**
* Registra um ouvinte para o evento customizado 'pedidoCriado'
*/
emissorDeEventos.on('pedidoCriado', (detalhesPedido) => {
console.log(`[Email] Enviando confirmação para o pedido #${detalhesPedido.id}...`);
});
/**
* Registra outro ouvinte para o mesmo evento (execução paralela/independente)
*/
emissorDeEventos.on('pedidoCriado', (detalhesPedido) => {
console.log(`[Estoque] Atualizando saldo dos itens do pedido #${detalhesPedido.id}...`);
});
// --- Exemplo Prático de Uso ---
const novoPedido = { id: 4092, valor: 250.00 };
console.log('Iniciando processamento do pedido...');
// Dispara o evento 'pedidoCriado' repassando os dados do pedido
emissorDeEventos.emit('pedidoCriado', novoPedido);
Pontos-chave
- Módulo Nativo sem Dependências: O
eventsfaz parte do core do Node.js, dispensando a instalação de bibliotecas de terceiros para comunicação via pub/sub interno. - Ordem de Execução Síncrona: Por padrão, os ouvintes registrados com
.on()são chamados de forma síncrona na ordem em que foram declarados dentro do ciclo do evento. - Escuta Única com
.once(): Para eventos que devem ser disparados apenas uma única vez (ex: inicialização de banco de dados), utilize o método.once()em vez de.on(). - Gerenciamento de Memory Leaks: Por padrão, o Node.js exibe um aviso se mais de 10 ouvintes forem adicionados ao mesmo evento; este limite pode ser alterado via
.setMaxListeners(n)caso necessário.
