Giusto per ribadire il concetto di stream che genera eventi asincroni da gestire, scrivere un programma, come il precedente, per effettuare una richiesta HTTP di tipo GET all'indirizzo http://cspnet.it, questa volta però, visualizzare tutti i dati della risposta solo quando la richiesta è terminata.
Come ulteriore vincolo, l'unica variabile globale, (a livello di intero programma, esterna a qualsiasi funzione) deve essere solo la variabile var http = require('http');
Suggerimenti
Ricordate che l'evento data viene generato piu' volte, al termine della visualizzazione della risposta (che sarà ovviamente la pagina html home del sito di csp), provate infatti a stampare il numero di volte che è stato emesso l'evento data.
Per il vincolo richiesto, non scordate le IIF
Buon lavoro!
Una possibile soluzione
var http = require('http'),
i = 0;
(function() {
var totalData = "",
numeroChunk = 0;
http.get('http://cspnet.it', function (response) {
response.setEncoding('utf8');
response.on('data', function(data) {
totalData += data;
numeroChunk++;
});
response.on('error', console.error);
response.on('end', function() {
console.log("FINITO: " +
totalData +
" NUMERO CHUNK " +
numeroChunk);
});
});
})();
Il prossimo post verterà sul potente concetto di stream in node.js.L'oggetto response vedetelo come un flusso di dati che viene alimentato dal server e letto dal client quando i dati sono disponibili.
Per motivi di efficienza, i dati non sono mandati in un unico blocco, l'evento 'data' dello stream response viene emesso più volte ed ogni volta viene eseguita la funzione di callback che accoda i dati ricevuti nella variabile totalData e incrementa il contatore numeroChunk.
Quando non ci sono più dati, lo stream emette l'evento end, che ci permette di definire una funzione di callback che stampa a video i dati finali.
Ho aggiornato su github il progetto, effettuate un git pull per aggiornare i sorgenti che avete in locale, come mostrato in questo post
Come al solito, per dubbi e/o domande: commentate!
Alla prox.
Ivan
Nessun commento:
Posta un commento