Node.js - 3.10 Exécution de code pilotée par les événements

Dans Node.js, le code ne s'exécute pas toujours dans l'ordre où il est écrit. Certaines fonctions sont enregistrées comme écouteurs, puis exécutées plus tard, lorsqu'un événement se produit. Cette leçon explique ce mécanisme et ses conséquences sur l'envoi de la réponse.

Les fonctions de rappel

Beaucoup de méthodes de Node.js reçoivent une fonction en argument. Node.js n'exécute pas cette fonction tout de suite. Il l'enregistre comme écouteur, puis l'appelle quand l'événement attendu se produit.

Par exemple, l'écouteur de l'événement end de la demande est appelé une fois que la demande a été entièrement lue.

request.on('end', () => {
  response.end();
});

Pourquoi placer la réponse dans l'écouteur

Si la réponse est envoyée avant la fin de la lecture de la demande, le code de l'écouteur tente ensuite de modifier une réponse déjà terminée. Une erreur d'en-têtes apparaît alors.

Il faut donc placer le code qui dépend d'un événement dans l'écouteur correspondant.

Un modèle non bloquant

Attendre la fin d'une opération avant de continuer bloquerait le serveur et l'empêcherait de traiter d'autres demandes. Node.js enregistre donc l'écouteur, puis poursuit l'exécution du code.

Cette approche garde la boucle d'événements disponible pour les autres demandes, et le code est exécuté seulement quand il doit l'être.

En résumé

Le code Node.js ne suit pas toujours l'ordre d'écriture. Les fonctions passées aux méthodes sont enregistrées comme écouteurs, puis exécutées quand l'événement attendu se produit. Le code qui dépend d'un événement doit donc être placé dans l'écouteur. Ce modèle évite de bloquer le serveur.

Points clés

  • Le code Node.js ne s'exécute pas toujours dans l'ordre d'écriture.
  • Une fonction passée à une méthode peut être appelée plus tard, lors d'un événement.
  • L'écouteur de l'événement end est appelé quand la demande est entièrement lue.
  • Le code qui dépend d'un événement doit être placé dans son écouteur.
  • Ce modèle évite de bloquer le serveur pendant une opération.

Questions fréquentes

Une fonction passée en argument est-elle toujours appelée plus tard ?

Pas toujours. Node.js utilise souvent ce modèle, mais chaque méthode a son propre comportement.

Pourquoi l'erreur d'en-têtes apparaît-elle ?

Le code tente de définir un en-tête après l'envoi de la réponse, ce qui n'est plus possible.

Qu'est-ce qu'un écouteur d'événement ?

C'est une fonction enregistrée pour être appelée quand un événement précis se produit, comme la fin de la lecture d'une demande.