Node.js - 4.6 Traiter les erreurs d'exécution
Une erreur d'exécution apparaît quand le code se casse pendant son exécution. Le message d'erreur indique la cause et l'endroit du problème, mais il faut savoir le lire. Cette leçon prend un exemple concret : une réponse modifiée après son envoi.
Lire le message d'erreur
Un message d'erreur est souvent long. Les dernières lignes sont peu utiles, il faut donc remonter vers le haut du message.
En haut se trouvent le code de l'erreur et un message détaillé. Dans l'exemple, le message indique qu'il est impossible de définir les en-têtes après leur envoi au client.
Trouver la cause
Le message indique aussi le fichier et la ligne où l'appel a été fait. Il faut ensuite remonter dans le code, jusqu'aux instructions qui précèdent cette ligne.
Dans l'exemple, la réponse est déjà terminée, mais le code continue et tente de modifier les en-têtes. Cela ne pose pas de problème tant que le code ne touche plus à la réponse, mais il devient fautif dès qu'on ajoute une modification après l'envoi.
Corriger en arrêtant l'exécution
La correction consiste à arrêter l'exécution de la fonction juste après l'envoi de la réponse, avec return. Les lignes suivantes ne s'exécutent alors plus.
response.end();
return;
En résumé
Un message d'erreur d'exécution se lit du haut vers le bas. Il indique le code d'erreur, la cause et la ligne concernée. L'erreur ERR_HTTP_HEADERS_SENT signale une modification de réponse après son envoi. Un return après l'envoi empêche le code suivant de s'exécuter.
Points clés
- Un message d'erreur d'exécution se lit en remontant depuis le bas.
- Le message indique la ligne et le fichier où l'erreur survient.
- L'erreur ERR_HTTP_HEADERS_SENT signale une modification après l'envoi de la réponse.
- La réponse doit être envoyée une seule fois.
- Un return après l'envoi de la réponse arrête l'exécution de la fonction.
Questions fréquentes
Par où commencer pour lire un message d'erreur ?
Commencez par le haut du message, qui donne le code d'erreur et la cause, puis repérez le fichier et la ligne indiqués.
Pourquoi l'erreur apparaît-elle seulement après un certain code ?
Parce que le code qui suit l'envoi de la réponse tente encore de la modifier. Le problème n'apparaît qu'à ce moment-là.
Quel est le rôle de return dans cette correction ?
Il arrête l'exécution de la fonction, pour que les lignes suivantes ne modifient pas une réponse déjà envoyée.