Guide des événements Node.js pour les débutants

Salut à toi, futur(e) mage Node.js ! Aujourd'hui, nous allons entreprendre un voyage passionnant à travers le monde des événements Node.js. Ne t'inquiète pas si tu n'as jamais écrit une ligne de code auparavant – je serai ton guide amical, et nous explorerons ce sujet ensemble, pas à pas. Alors, prends une tasse de café (ou de thé, si c'est ton truc), et plongeons dedans !

Node.js - Events

Qu'est-ce que les événements dans Node.js ?

Avant de rentrer dans les détails, penchons-nous sur une simple analogie. Imagine que tu es à une fête (une fête Node.js, bien sûr !). Tu discutes avec des amis, et soudain quelqu'un crie, "La pizza est là !" Cette cri est un événement, et ta réaction – peut-être course pour attraper une part – est la façon dont tu gères cet événement.

Dans Node.js, les événements fonctionnent de manière similaire. Ce sont des choses qui se passent dans ton programme, et tu peux configurer des réactions spécifiques (que nous appelons des "listeners") pour répondre lorsque ces événements se produisent.

La classe EventEmitter

Au cœur des événements Node.js se trouve quelque chose appelé la classe EventEmitter. Penses-y comme l'animateur de la fête qui est responsable de crier les annonces (émettre des événements) et de s'assurer que tout le monde qui veut entendre parler de la pizza (ou de tout autre événement) reçoit le message.

Voyons comment nous pouvons créer notre propre EventEmitter :

const EventEmitter = require('events');

// Créer un nouvel objet EventEmitter
const myEmitter = new EventEmitter();

Dans ce code, nous importons d'abord le module events, qui nous donne accès à la classe EventEmitter. Ensuite, nous créons une nouvelle instance de EventEmitter appelée myEmitter. Cet objet myEmitter peut maintenant émettre des événements et les écouter.

Émettre et gérer des événements

Maintenant que nous avons notre EventEmitter, apprenons à l'utiliser. Nous commencerons par les deux méthodes les plus importantes : on() et emit().

La méthode on()

La méthode on() est utilisée pour attacher une fonction de listener à un événement. C'est comme dire à tes amis : "Hey, fais-moi savoir quand la pizza arrive !"

Voici comment on l'utilise :

myEmitter.on('pizzaArrived', () => {
console.log('Yay ! La pizza est là !');
});

Dans cet exemple, nous disons à myEmitter d'écouter un événement appelé 'pizzaArrived'. Lorsque cet événement se produit, il exécutera la fonction que nous avons fournie, qui simplement affiche un message dans la console.

La méthode emit()

La méthode emit() est utilisée pour déclencher un événement. C'est comme réellement crier "La pizza est là !" à la fête.

Voyons comment cela fonctionne :

myEmitter.emit('pizzaArrived');

Lorsque cette ligne est exécutée, elle déclenchera l'événement 'pizzaArrived', et tous les listeners attachés à cet événement exécuteront leurs fonctions.

Mettons-le tous ensemble :

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

myEmitter.on('pizzaArrived', () => {
console.log('Yay ! La pizza est là !');
});

myEmitter.emit('pizzaArrived');
// Output : Yay ! La pizza est là !

Exécute ce code, et tu verras le message affiché dans ta console. Félicitations ! Tu viens de créer et de gérer ton premier événement Node.js !

Passer des arguments avec des événements

Parfois, tu veux passer des informations supplémentaires avec ton événement. Par exemple, peut-être que tu veux spécifier quel type de pizza est arrivé. Nous pouvons faire cela en passant des arguments à la méthode emit() :

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

myEmitter.on('pizzaArrived', (type) => {
console.log(`Yay ! La ${type} pizza est là !`);
});

myEmitter.emit('pizzaArrived', 'pepperoni');
// Output : Yay ! La pepperoni pizza est là !

Dans cet exemple, nous passons 'pepperoni' comme argument lorsque nous émettons l'événement. La fonction de listener peut alors utiliser cet argument dans sa réponse.

Listeners multiples

Tu peux attacher plusieurs listeners au même événement. Imaginons que différentes personnes à la fête veulent réagir différemment à l'arrivée de la pizza :

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

myEmitter.on('pizzaArrived', () => {
console.log('Personne 1 : Je vais chercher les assiettes !');
});

myEmitter.on('pizzaArrived', () => {
console.log('Personne 2 : Je vais verser les boissons !');
});

myEmitter.on('pizzaArrived', () => {
console.log('Personne 3 : Je vais mettre de la musique !');
});

myEmitter.emit('pizzaArrived');
// Output :
// Personne 1 : Je vais chercher les assiettes !
// Personne 2 : Je vais verser les boissons !
// Personne 3 : Je vais mettre de la musique !

Lorsque tu exécutes ce code, tu verras toutes les réponses affichées dans ta console. Les listeners sont appelés dans l'ordre dans lequel ils ont été enregistrés.

Listeners uniques

Parfois, tu ne veux écouter un événement qu'une seule fois. Pour cela, nous avons la méthode once(). C'est comme dire, "Fais-moi savoir uniquement lorsque la première pizza arrive, après ça, je n'ai plus besoin de savoir."

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

myEmitter.once('pizzaArrived', () => {
console.log('La première pizza est arrivée !');
});

myEmitter.emit('pizzaArrived');
// Output : La première pizza est arrivée !

myEmitter.emit('pizzaArrived');
// Aucun output

Dans cet exemple, la deuxième emit() ne produit aucun output car le listener a été supprimé après son exécution unique.

Événements d'erreur

Dans Node.js, il y a un événement spécial appelé 'error'. Si un événement d'erreur est émis et qu'il n'y a pas de listener pour cela, Node.js affichera le traceback et quittera le programme. Il est toujours bon de pratique d'avoir un listener d'erreur :

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

myEmitter.on('error', (err) => {
console.error('Oups ! Quelque chose s'est mal passé :', err);
});

myEmitter.emit('error', new Error('Le four à pizza est cassé !'));
// Output : Oups ! Quelque chose s'est mal passé : Error: Le four à pizza est cassé !

Supprimer des listeners

Si tu ne veux plus écouter un événement, tu peux supprimer le listener en utilisant la méthode removeListener() :

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

function pizzaHandler() {
console.log('Moment de la pizza !');
}

myEmitter.on('pizzaArrived', pizzaHandler);

myEmitter.emit('pizzaArrived');
// Output : Moment de la pizza !

myEmitter.removeListener('pizzaArrived', pizzaHandler);

myEmitter.emit('pizzaArrived');
// Aucun output

Résumé des méthodes de EventEmitter

Voici un tableau résumant les principales méthodes que nous avons couvertes :

Méthode Description
on(eventName, listener) Ajoute une fonction de listener à l'événement spécifié
emit(eventName[, ...args]) Déclenche l'événement spécifié, optionnellement avec des arguments
once(eventName, listener) Ajoute une fonction de listener unique à l'événement spécifié
removeListener(eventName, listener) Supprime un listener spécifique de l'événement spécifié
removeAllListeners([eventName]) Supprime tous les listeners, ou ceux de l'événement spécifié

Et voilà ! Tu viens de faire tes premiers pas dans le monde des événements Node.js. Souviens-toi, la pratique rend parfait, alors n'hesite pas à expérimenter avec ces concepts. Essaie de créer tes propres événements, peut-être pour un jeu simple ou une application de chat.

En continuant ton parcours dans Node.js, tu trouveras que les événements sont un outil puissant pour créer des applications réactives et orientées événements. Ils sont utilisés largement dans de nombreuses applications et bibliothèques Node.js, donc une bonne compréhension d'eux te servira grandement dans tes futurs projets.

Continue de coder, continue d'apprendre, et surtout, continue de t'amuser ! Et souviens-toi, que ce soit pour le codage ou la pizza, c'est toujours mieux partagé avec des amis. Bon codage Node.js !

Credits: Image by storyset