Écrivez un programme qui fait une requête HTTP GET sur une URL fournie en premier argument de la ligne de commande. Récupérez toutes les données du serveur (et pas simplement le premier événement 'data'), puis écrivez deux lignes sur la console (stdout).
La première ligne devrait être un nombre entier représentant le nombre de
caractères reçus du serveur. La seconde ligne devrait être la String
complète reçue du serveur.
Il y a deux approches pour résoudre ce problème :
Récupérez les données au fil des multiples événements 'data' et concaténez-les au fur et à mesure. Utilisez l’événement 'end' pour détecter la fin du flux et faire vos affichages à ce moment-là.
Utilisez un module tiers pour abstraire les difficultés de ce processus
d’accumulation du flux complet. Au moins deux modules fournissent une API
utile pour résoudre ce problème : bl
(Buffer List) et concat-stream
;
faites votre choix !
http://npm.im/bl http://npm.im/concat-stream
Pour installer un module tiers, utilisez l’outil npm
(Node Packaged Modules).
Tapez simplement :
$ npm install bl
Cette commande téléchargera et installera la dernière version publique du
module dans un sous-dossier nommé node_modules
. Tout module dans ce
sous-dossier de votre programme principal peut être chargé avec la syntaxe
require
sans préfixe de chemin (et notamment sans './') :
var bl = require('bl');
Node regardera d’abord dans ses modules noyau puis dans le dossier
node_modules
où se trouve le module tiers.
Si vous n’avez pas de connexion Internet, créez simplement un dossier
node_modules
et copiez-y tout le dossier du module tiers que vous
souhaitez utiliser depuis le répertoire d’installation de learnyounode :
/node_modules/bl /node_modules/concat-stream
Aussi bien bl
que concat-stream
peuvent recevoir un flux par pipeline,
et ils accumuleront son contenu pour vous. Une fois que le flux a fini, une
fonction de rappel sera déclenchée avec les données :
response.pipe(bl(function(err, data) { /* ... */ }))
// ou
response.pipe(concatStream(function(data) { /* ... */ }))
Remarquez que vous aurez probablement besoin de faire un data.toString()
pour convertir le Buffer
reçu.
La documentation de ces deux modules tiers a été installée avec learnyounode sur votre système pour que vous puissiez la consulter facilement :
/docs/bl.html /docs/concat-stream.html