Node.js - 3.9 Lire le corps d'une requête POST avec Node.js
Les données d'un formulaire envoyé en POST ne sont pas disponibles directement dans la requête. Elles arrivent sous forme de flux, par morceaux. Cette leçon montre comment les recevoir, les assembler et lire la valeur saisie par l'utilisateur.
Recevoir les données sous forme de flux
Les données entrantes arrivent sous forme de flux, c'est-à-dire de morceaux successifs. Node.js reçoit ces morceaux un par un, sans attendre l'envoi complet. Pour un petit formulaire, l'intérêt est faible. Pour un gros fichier, traiter les morceaux plus tôt peut être utile.
Un tampon, ou buffer, permet de contenir ces morceaux avant de les traiter. La vidéo compare ce fonctionnement à un arrêt de bus : les morceaux attendent d'être récupérés pour être traités ensemble.
const body = [];
request.on('data', (chunk) => {
body.push(chunk);
});
Assembler le corps à la fin de la requête
L'événement data se déclenche à chaque morceau reçu. Chaque morceau est ajouté au tableau body avec push. La constante garde le même tableau, mais son contenu change.
L'événement end se déclenche quand toutes les données sont reçues. C'est là qu'on assemble les morceaux dans un buffer avec Buffer.concat, puis qu'on le convertit en texte avec toString.
request.on('end', () => {
const parsedBody = Buffer.concat(body).toString();
});
Extraire la valeur du champ
Le formulaire envoie les données sous forme de paires clé et valeur, séparées par un signe égal. Pour obtenir la valeur saisie, on découpe le texte sur le signe égal et on prend le deuxième élément du résultat.
Ce code doit être placé dans l'événement end, car les données ne sont pas encore disponibles avant. La vidéo indique que le point d'exclamation apparaît encodé, ce qui sera traité plus tard. Une fois la valeur extraite, elle peut être écrite dans un fichier texte.
const message = parsedBody.split('=')[1];
En résumé
Le corps d'une requête POST arrive par morceaux, sous forme de flux. Les morceaux sont collectés dans un tableau, puis assemblés avec Buffer une fois l'envoi terminé. La valeur de chaque champ est ensuite extraite après le signe égal. Cette lecture se fait dans les événements data et end.
Points clés
- Le corps d'une requête POST arrive sous forme de flux.
- L'événement data reçoit chaque morceau de données.
- L'événement end signale que toutes les données sont arrivées.
- Buffer.concat assemble les morceaux avant la conversion en texte.
- Le code qui utilise les données doit être placé dans l'événement end.
Questions fréquentes
Pourquoi ne pas lire les données tout de suite ?
Elles arrivent par morceaux. Tant que l'événement end n'a pas eu lieu, l'envoi n'est pas terminé et le corps est incomplet.
À quoi sert un buffer ?
Il contient les morceaux reçus avant de les traiter. Il permet de les assembler en une seule donnée.
Pourquoi le point d'exclamation apparaît-il encodé ?
Les données de formulaire sont encodées pour circuler dans une requête. La vidéo indique que ce point sera traité plus tard.