Ir para o conteúdo do rodapé
AJUDA DO NODE

eventemitter2 NPM (Como funciona para desenvolvedores)

É essencial criar aplicativos que sejam responsivos e capazes de gerenciar fluxos de trabalho complexos com eficiência no ambiente de desenvolvimento acelerado de hoje. Para isso, sistemas eficazes de gestão documental e arquiteturas orientadas a eventos são essenciais. Quando combinadas, as poderosas ferramentas EventEmitter2 e IronPDF permitem que os desenvolvedores criem aplicativos dinâmicos, orientados a eventos, com recursos avançados de manipulação de PDF.

A funcionalidade da classe EventEmitter padrão é expandida pelo EventEmitter2, uma biblioteca de emissão de eventos estendida for Node.js, que adiciona recursos como múltiplos ouvintes, namespaces de eventos, curingas e eventos de expressão regular. Com essas melhorias, o gerenciamento de fluxos de trabalho complexos orientados a eventos torna-se mais simples, garantindo que seu aplicativo possa executar uma ampla gama de tarefas assíncronas com facilidade.

Neste artigo, veremos como integrar o EventEmitter2 com o IronPDF em uma aplicação Node.js Vamos abordar como instalar e configurar ambas as ferramentas, dar exemplos de como lidar com eventos e criar PDFs dinâmicos, e discutir casos de uso avançados e práticas recomendadas. Após a leitura deste artigo, você deverá ter um sólido conhecimento de como usar essas poderosas tecnologias para construir sistemas complexos, orientados a eventos, capazes de processar PDFs com facilidade.

O que é o EventEmitter2 do NPM?

Aprimore a funcionalidade da classe nativa EventEmitter com o EventEmitter2 , um poderoso módulo de manipulação de eventos for Node.js Para lidar com estruturas complexas orientadas a eventos de forma mais eficaz, oferece uma série de recursos poderosos. Os eventos com curinga e os eventos com expressões regulares são duas funcionalidades importantes que permitem acionamentos de eventos mais flexíveis com base em padrões, além do agrupamento e processamento de inúmeros eventos relacionados usando namespaces. A capacidade do EventEmitter2 de suportar múltiplos ouvintes para um único evento permite priorizar ouvintes para lidar com diferentes ações desencadeadas pelo mesmo evento.

eventemitter2 NPM (Como funciona para desenvolvedores): Figura 1 - EventEmitter2

Ele também fornece espaços de nomes de eventos, que ajudam a organizar e classificar eventos, facilitando o gerenciamento e a depuração de sistemas complexos. Os listeners assíncronos, essenciais para gerenciar ações não bloqueantes em aplicações Node.js , também são suportados pela biblioteca de métodos de emissão de eventos. Devido a essas características, o EventEmitter2 é especialmente benéfico para aplicações online de grande escala, jogos e sistemas em tempo real que necessitam de gerenciamento de eventos confiável. O EventEmitter2, que é uma extensão da classe EventEmitter padrão, oferece aos programadores recursos robustos para escrever código mais escalável e de fácil manutenção.

A classe EventEmitter integrada no Node.js foi aprimorada com o robusto pacote de manipulação de eventos EventEmitter2. As principais características que diferenciam o EventEmitter2 são as seguintes:

Eventos Wildcard

Permite o uso de padrões curinga para eventos específicos, a fim de lidar e agrupar diversos eventos relacionados. Isso é útil para uma gestão de eventos mais hierárquica e estruturada.

Eventos de Expressão Regular

Permite o acionamento de eventos de acordo com padrões de expressões regulares, proporcionando maior flexibilidade no gerenciamento de eventos.

Vários ouvintes

Permite associar mais de um ouvinte a um evento. É possível obter um controle mais preciso sobre a sequência de execução dos listeners, permitindo que cada listener tenha uma prioridade.

Espaços de nomes de eventos

Simplifica a gestão e a depuração de sistemas complexos, facilitando a utilização de namespaces para a organização e classificação de eventos.

Ouvintes assíncronos

Permite ações não bloqueantes, essenciais para aplicações de alto desempenho, ao suportar ouvintes de eventos assíncronos.

Manipulação do Ouvinte

Oferece maneiras eficazes de adicionar, remover e gerenciar ouvintes.

Controle de Emissões de Eventos

Impede vazamentos de memória em programas longos, permitindo o controle sobre o número de ouvintes de um evento e a capacidade de restringir o número de vezes que um evento é ouvido.

Borbulhamento de evento

Permite que os eventos se propaguem em uma hierarquia, suportando o bubbling de eventos, que é comparável à forma como os eventos se propagam no DOM dos navegadores da web.

Otimização de desempenho

Otimizado para desempenho, é adequado para aplicações de alto tráfego onde é necessário um processamento de eventos rápido e eficaz.

Avisos detalhados de vazamento de memória

Ajuda os desenvolvedores a manterem seus aplicativos saudáveis, alertando-os sobre possíveis vazamentos de memória quando muitos ouvintes são adicionados a um único evento.

Criar e configurar o EventEmitter2 em Node.js

É simples criar e configurar o EventEmitter2 em uma aplicação Node.js Aqui está um tutorial detalhado sobre como configurar e usar o EventEmitter2.

Instale o EventEmitter2

O primeiro passo é instalar o pacote EventEmitter2 usando o npm. Com o terminal aberto, digite o seguinte comando:

npm install eventemitter2
npm install eventemitter2
SHELL

Importar e configurar o EventEmitter2

Em seguida, importe o EventEmitter2 para o seu programa Node.js e modifique-o de acordo com suas necessidades. Esta é uma ilustração de uma configuração simples do EventEmitter2:

const EventEmitter2 = require('eventemitter2').EventEmitter2;

// Configure EventEmitter2 with options
const eventEmitter = new EventEmitter2({
  wildcard: true,         // Allows use of wildcards.
  delimiter: '.',         // The delimiter used to segment namespaces.
  newListener: false,     // If true, the `newListener` event is emitted when new listeners are added.
  maxListeners: 20,       // Maximum number of listeners per event.
  verboseMemoryLeak: true // Show warnings if potential memory leaks are detected.
});

// Define an example listener for a wildcard event
eventEmitter.on('user.*', (data) => {
  console.log('User event:', data);
});

Emitir eventos

Após configurar o emissor de eventos, você pode começar a enviar eventos e observar como os destinatários reagem. Para emitir eventos, siga estes passos:

// Emit a user login event.
eventEmitter.emit('user.login', { username: 'john_doe' });

// Emit a user logout event.
eventEmitter.emit('user.logout', { username: 'john_doe' });

Adicionar e remover ouvintes

O mesmo evento permite adicionar e remover ouvintes conforme necessário. É assim que se faz:

// Define a specific listener
const loginListener = (data) => {
  console.log('User logged in:', data);
};

// Add the login listener to the user.login event
eventEmitter.on('user.login', loginListener);

// Emit the login event
eventEmitter.emit('user.login', { username: 'jane_doe' });

// Remove the login listener
eventEmitter.off('user.login', loginListener);

// Emit the login event again to show that the listener has been removed
eventEmitter.emit('user.login', { username: 'jane_doe' });

Utilizando ouvintes assíncronos

O EventEmitter2 oferece suporte a listeners assíncronos, o que é vantajoso ao gerenciar operações com uso intensivo de E/S ou outros processos assíncronos:

// Define an asynchronous listener
eventEmitter.on('file.upload', async (data) => {
  await new Promise((resolve) => setTimeout(resolve, 2000)); // Simulate async operation
  console.log('File uploaded:', data);
});

// Emit the file upload event
eventEmitter.emit('file.upload', { filename: 'example.txt' });

Tratamento de erros

Os erros que possam surgir durante o processamento de eventos devem ser corrigidos. Você pode monitorar a ocorrência de erros:

eventEmitter.on('error', (err) => {
  console.error('An error occurred:', err);
});

// Emit an error event
eventEmitter.emit('error', new Error('Something went wrong!'));

Juntando tudo

Segue um exemplo completo que abrange cada uma das etapas mencionadas anteriormente:

const EventEmitter2 = require('eventemitter2').EventEmitter2;

// Create a new EventEmitter2 instance
const eventEmitter = new EventEmitter2({
  wildcard: true,
  delimiter: '.',
  newListener: false,
  maxListeners: 20,
  verboseMemoryLeak: true
});

// Add listeners
eventEmitter.on('user.*', (data) => {
  console.log('User event:', data);
});

const loginListener = (data) => {
  console.log('User logged in:', data);
};

eventEmitter.on('user.login', loginListener);

eventEmitter.on('file.upload', async (data) => {
  await new Promise((resolve) => setTimeout(resolve, 2000));
  console.log('File uploaded:', data);
});

eventEmitter.on('error', (err) => {
  console.error('An error occurred:', err);
});

// Emit events
eventEmitter.emit('user.login', { username: 'john_doe' });
eventEmitter.emit('user.logout', { username: 'john_doe' });
eventEmitter.emit('file.upload', { filename: 'example.txt' });

// Emit an error event
eventEmitter.emit('error', new Error('Something went wrong!'));

// Remove listeners
eventEmitter.off('user.login', loginListener);

// Emit the login event again
eventEmitter.emit('user.login', { username: 'jane_doe' });

Este guia oferece uma visão geral abrangente da criação e configuração do EventEmitter2 em uma aplicação Node.js , incluindo configuração de listeners, emissão de eventos, tratamento de erros e gerenciamento de operações assíncronas.

eventemitter2 NPM (Como funciona para desenvolvedores): Figura 2 - EventEmitter2

Começando

Os desenvolvedores podem criar aplicativos dinâmicos, orientados a eventos, com poderosos recursos de criação e manipulação de PDFs, combinando o EventEmitter2 com o IronPDF em um aplicativo Node.js Com a ajuda deste guia, você poderá configurar e integrar essas duas ferramentas ao seu projeto Node.js

O que é o IronPDF?

IronPDF é uma poderosa biblioteca Node.js que visa produzir páginas PDF de qualidade excepcional a partir de texto HTML. Sem comprometer o conteúdo original da web, ele agiliza o processo de conversão de arquivos HTML, CSS e outros arquivos JavaScript em PDFs formatados corretamente. Para aplicações web que precisam gerar documentos dinâmicos e imprimíveis, como relatórios, faturas e certificados, esta é uma ferramenta muito útil.

Configurações de página personalizáveis, cabeçalhos, rodapés e a possibilidade de adicionar fontes e imagens são apenas algumas das funcionalidades do IronPDF. Ele consegue lidar com estilos e layouts complexos para garantir que cada PDF de saída de teste esteja em conformidade com o layout exigido. Além disso, o IronPDF gerencia a execução de JavaScript dentro do HTML, permitindo a renderização precisa de informações dinâmicas e interativas.

eventemitter2 NPM (Como funciona para desenvolvedores): Figura 3 - IronPDF

Funcionalidades do IronPDF

Geração de PDF a partir de HTML

Converter JavaScript, HTML e CSS para PDF. O IronPDF oferece suporte a media queries e design responsivo, dois padrões web contemporâneos. Útil para decorar dinamicamente relatórios em PDF, faturas e documentos com HTML e CSS.

Edição de PDF

É possível adicionar texto, fotos e outros conteúdos a arquivos PDF preexistentes. Extrair texto e imagens de arquivos PDF, combinar vários PDFs em um único arquivo e dividir arquivos PDF em vários documentos separados. Inclua marcas d'água, anotações, cabeçalhos e rodapés.

Desempenho e confiabilidade

Alto desempenho e confiabilidade são qualidades desejáveis ​​em projetos de ambientes industriais. Gerencia grandes conjuntos de documentos com facilidade.

Instale o IronPDF

Instale o pacote IronPDF para obter as ferramentas necessárias para trabalhar com PDFs em projetos Node.js

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
SHELL

Gere um PDF com o EventEmitter2.

Crie um novo arquivo e configure o EventEmitter2:

const EventEmitter2 = require('eventemitter2').EventEmitter2;
const IronPdf = require("@ironsoftware/ironpdf");

const document = IronPdf.PdfDocument;
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({ licenseKey: '' });

// Initialize EventEmitter2
const eventEmitter = new EventEmitter2({
  wildcard: true,
  delimiter: '.',
  newListener: false,
  maxListeners: 20, // Maximum number of listeners
  verboseMemoryLeak: true,
});

// Function to generate PDF report
const generatePdfReport = async (data) => {
  try {
    const htmlContent = `<h1>Event Report</h1><p>Event: ${data.eventName}</p><p>Data: ${JSON.stringify(data)}</p>`;
    const pdfDoc = await document.fromHtml(htmlContent);
    const filePath = `event_report_${Date.now()}.pdf`;
    await pdfDoc.saveAs(filePath);
    console.log('PDF report generated:', filePath);
  } catch (error) {
    console.error('Error generating PDF report:', error);
  }
};

// Define a listener for a wildcard event
eventEmitter.on('user.*', (data) => {
  console.log('User event:', data);
  generatePdfReport({ eventName: data.eventName, ...data });
});

// Emit test events
eventEmitter.emit('user.login', { eventName: 'user.login', username: 'john_doe' });
eventEmitter.emit('user.logout', { eventName: 'user.logout', username: 'john_doe' });

Precisamos da classe IronPDF do pacote IronPDF e da classe EventEmitter2 do pacote EventEmitter2. Iniciamos uma instância do EventEmitter2 e definimos seus parâmetros, incluindo o número máximo de ouvintes, o delimitador para namespaces e o suporte a curingas. Desenvolvemos um método assíncrono chamado generatePdfReport que converte informações HTML em PDF usando o IronPDF.

Após receber os dados do evento, a função gera uma string HTML, um documento PDF e um arquivo. O tratamento de erros está integrado para registrar quaisquer problemas encontrados durante a criação dos PDFs.

eventemitter2 NPM (Como funciona para desenvolvedores): Figura 4 - EventEmitter2 com IronPDF

Utilizamos um caractere curinga (user.*) para configurar um ouvinte para eventos do usuário. Qualquer evento que comece com "user" faz com que este ouvinte seja ativado. Quando um evento é liberado, o ouvinte registra as informações sobre ele e as usa para invocar a função generatePdfReport. Dois eventos de teste, user.login e user.logout, foram liberados. Cada evento possui uma carga útil com username e eventName.

eventemitter2 NPM (Como funciona para desenvolvedores): Figura 5 - Saída em PDF

Conclusão

Uma aplicação Node.js pode criar sistemas dinâmicos orientados a eventos com fortes recursos de criação de PDFs, integrando o EventEmitter2 ao Node-IronPDF. Essa poderosa combinação é uma ótima opção para aplicações que necessitam de relatórios automatizados e monitoramento de dados em tempo real, pois oferece aos desenvolvedores a capacidade de gerenciar fluxos de trabalho complexos e fornecer relatórios completos.

Quando combinada com os recursos sofisticados de produção de PDF do Node-IronPDF e a adaptabilidade do EventEmitter2 no gerenciamento de eventos curinga e namespaces, essa integração oferece uma solução robusta para uma variedade de casos de uso. Somente com esse método de integração, você pode construir sistemas mais escaláveis ​​e fáceis de manter, seja para criar um sistema de relatórios automatizado, um painel de análise em tempo real ou qualquer outro tipo de aplicativo orientado a eventos.

Com o auxílio do IronPDF e do Iron Software , você pode adicionar recursos como OCR, leitura de código de barras, criação de PDFs, integração com o Excel e uma infinidade de outras funcionalidades ao seu conjunto de ferramentas para desenvolvimento em Node.js Com a edição comum custando apenas $799, os desenvolvedores podem usar os sistemas e o conjunto de ferramentas extremamente adaptáveis ​​da Iron Software para criar mais aplicativos e recursos da web com maior eficiência.

Ter alternativas de licenciamento claras e adaptadas ao projeto facilita aos desenvolvedores a seleção do modelo ideal. Com a ajuda dessas funcionalidades, os desenvolvedores podem resolver uma ampla gama de problemas de forma fácil, eficaz e coesa.

Darrius Serrant
Engenheiro de Software Full Stack (WebOps)

Darrius Serrant é bacharel em Ciência da Computação pela Universidade de Miami e trabalha como Engenheiro de Marketing WebOps Full Stack na Iron Software. Atraído por programação desde jovem, ele via a computação como algo misterioso e acessível ao mesmo tempo, tornando-a o meio ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim