2017-03-28 3 views
0

J'essaye de mettre en application un serveur simple de NodeJS qui lit un fichier et puis envoie ligne par ligne au demandeur avec un intervalle de temps entre les émissions. Le problème est le délai qui ne fonctionne pas comme prévu.Comment faire un serveur NodeJS qui émet un fichier chaîne ligne par ligne avec un intervalle de temps lorsqu'il est connecté?

var http = require('http'); 
var readline = require('readline'); 
var fs = require('fs'); 

var server = http.createServer(function (req, res) { 
    console.log('request was made: '+req.url); 

    res.writeHead(200,{'Content-Type': 'text/plain'}); 

    var myReadStream = fs.createReadStream(__dirname+"/foo.txt", 'utf8'); 

    var rl= readline.createInterface({ 
    input: myReadStream 
    }); 

    rl.on('line', function(input) { 

    res.write(input); 
    setTimeout(function(){}, 3000); 

    }); 

}); 


server.listen(3000,'127.0.0.1'); 

Répondre

3

Vous êtes presque là, vous avez juste besoin de déplacer le res.write(line) dans votre setTimeout() si l'appel à res.write(line) se produit lorsque le rappel de délai d'attente est invoquée.

rl.on('line', line => { 
    setTimeout(() => { 
    res.write(line); 
    }, 3000); 
}); 

Aussi, vous devriez écouter l'événement 'close' de readline savoir quand vous pouvez appeler res.end() mettre fin au flux de réponse.

rl.on('close',() => { 
    res.end(); 
});