Module Events de Node.js

Java FileModules intégrés de Node.js


Node.js est un environnement d'exécution JavaScript piloté par les événements, eteventsle module est le cœur de l'architecture pilotée par les événements de Node.js. Il permet aux développeurs de créer, déclencher et écouter des événements personnalisés, permettant ainsi une structure de code faiblement couplée.

En termes simples,eventsle module fournit un mécanisme permettant à différentes parties (objets) de communiquer entre elles sans appeler directement les méthodes les unes des autres.


Concepts fondamentaux

Classe EventEmitter

eventsLe cœur du module estEventEmitterla classe, et presque tous les objets Node.js qui peuvent émettre des événements héritent de cette classe.

Exemple

const EventEmitter = require('events');

Utilisation de base

1. Créer une instance d'EventEmitter

const myEmitter = new EventEmitter();

2. Émettre des événements

myEmitter.emit('event');
3. Écouter les événements
myEmitter.on('event', () => {
  console.log('Événement déclenché !');
});

Explication détaillée des méthodes courantes

on(eventName, listener)

Ajoute un écouteur à la fin du tableau d'écouteurs pour l'événement spécifié.

Exemple

myEmitter.on('greet', (name) => {
  console.log(`Hello, ${name}!`);
});

myEmitter.emit('greet', 'Alice'); // Sortie : Hello, Alice!

once(eventName, listener)

Ajoute un écouteur à usage unique qui est déclenché au plus une fois.

Exemple

myEmitter.once('welcome', () => {
  console.log('Bienvenue pour votre première visite !');
});

myEmitter.emit('welcome'); // Sortie : Bienvenue pour votre première visite !
myEmitter.emit('welcome'); // Ne produira aucune sortie

emit(eventName[, ...args])

Appelle de manière synchrone chaque écouteur enregistré pour l'événement spécifié, en les exécutant dans l'ordre dans lequel ils ont été enregistrés.

Exemple

myEmitter.on('sum', (a, b) => {
  console.log(a + b);
});

myEmitter.emit('sum', 2, 3); // Sortie : 5

removeListener(eventName, listener)

Supprime un écouteur du tableau des écouteurs pour l'événement spécifié.

Exemple

const callback = () => console.log('Événement déclenché');
myEmitter.on('event', callback);
myEmitter.removeListener('event', callback);

removeAllListeners([eventName])

Supprime tous les écouteurs, ou tous les écouteurs pour un événement spécifié.

Exemple

myEmitter.removeAllListeners('event');

Fonctionnalités avancées

Gestion des erreurs

Les instances d'EventEmitter gèrent l'événement 'error' de manière spéciale. Si aucun écouteur n'est enregistré pour l'événement 'error', alors lorsque l'événement 'error' est émis, une erreur est levée et le processus Node.js se termine.

Exemple

myEmitter.on('error', (err) => {
  console.error('Une erreur s'est produite :', err.message);
});

myEmitter.emit('error', new Error('Quelque chose s'est mal passé !'));

Obtenir des informations sur les écouteurs

Exemple

// Obtenir le nombre d'écouteurs pour l'événement spécifié
myEmitter.listenerCount('event');

// Obtenir le tableau des écouteurs pour l'événement spécifié
myEmitter.listeners('event');

Définir le nombre maximal d'écouteurs

Par défaut, chaque événement peut enregistrer jusqu'à 10 écouteurs ; au-delà, un avertissement sera émis.

Exemple

myEmitter.setMaxListeners(20); // Défini sur 20

Exemples d'applications pratiques

Créer des classes d'événements personnalisées

Exemple

const EventEmitter = require('events');

class MyClass extends EventEmitter {
  constructor() {
    super();
    this.value = 0;
  }
 
  increment() {
    this.value++;
    this.emit('incremented', this.value);
  }
}

const myInstance = new MyClass();
myInstance.on('incremented', (value) => {
  console.log('Valeur augmentée à :', value);
});

myInstance.increment(); // Sortie : Valeur augmentée à : 1
myInstance.increment(); // Sortie : Valeur augmentée à : 2

Implémenter un bus d'événements simple

Exemple

const EventEmitter = require('events');

class EventBus extends EventEmitter {}
const bus = new EventBus();

// Composant A
bus.on('message', (msg) => {
  console.log('Composant A a reçu :', msg);
});

// Composant B
bus.emit('message', 'Bonjour de B');

Bonnes pratiques

  1. Conventions de nommage: Les noms d'événements doivent utiliser camelCase ou kebab-case.
  2. Éviter les fuites de mémoire: Supprimez les écouteurs qui ne sont plus nécessaires en temps voulu.
  3. Gestion des erreurs: Ajoutez toujours un écouteur pour l'événement 'error'.
  4. Utilisation avec modération: N'abusez pas des événements; les appels de fonction simples peuvent être plus directs et efficaces.

Résumé

de Node.jseventsmodule est la base pour implémenter la programmation événementielle, à traversEventEmitterclasse, nous pouvons facilement créer et gérer des événements personnalisés. Maîtriser ce module est crucial pour développer des applications Node.js efficaces et découplées. Des mécanismes de notification simples aux architectures d'application complexes,eventsle module offre un support puissant.

Java FileModules intégrés de Node.js

Autres extensions