Module Events 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
Utilisation de base
1. Créer une instance d'EventEmitter
2. Émettre des événements
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
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
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
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
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
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
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
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
Exemples d'applications pratiques
Créer des classes d'événements personnalisées
Exemple
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
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
- Conventions de nommage: Les noms d'événements doivent utiliser camelCase ou kebab-case.
- Éviter les fuites de mémoire: Supprimez les écouteurs qui ne sont plus nécessaires en temps voulu.
- Gestion des erreurs: Ajoutez toujours un écouteur pour l'événement 'error'.
- 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.
Modules intégrés de Node.js