2017-08-26 3 views
0
var http = require('http'); 
var fs = require('fs'); 
var path = process.argv[2]; 
var str=""; 
function onRequest(request, response) { 
    str += ""; 
    console.log("Request received" + path); 
    fs.readdir(path, function(err, items) { 
     str += items; 
    }); 
    response.writeHead(200, {"Context-Type": "text/plain"}); 
    response.write(new Buffer(str).toString()); 
    response.end(); 
} 
http.createServer(onRequest).listen(8000); 

L'extrait ci-dessus crée un serveur http qui obtient un chemin de répertoire de l'utilisateur en tant qu'argument. Effectuez une requête http pour obtenir la liste des fichiers disponibles dans le répertoire et renvoyez-les en tant que réponse.réponse écrite à la page uniquement sur deuxième requête

La réponse est écrite sur la page uniquement lors de la deuxième requête. La page est affichée vide à la première demande.

Quelqu'un peut-il aider. Merci d'avance!!

Répondre

1

Javascript est non bloquant, si

response.writeHead(200, {"Context-Type": "text/plain"}); 
response.write(new Buffer(str).toString()); 
response.end(); 

sera exécutée avant

str += items; 

Avec

fs.readdir(path, function(err, items) { 
    // Handle error 
    str += items; 
    response.writeHead(200, {"Context-Type": "text/plain"}); 
    response.write(new Buffer(str).toString()); 
    response.end(); 
}); 

il enverra la réponse après readdir.

Et en Javascript le programme ne sera pas démarré pour chaque nouvelle requête (comme en PHP). Ainsi, votre variable globale sera partagée entre toutes les demandes. Si vous ne voulez pas mettre le var str=""; dans onRequest.

Si vous avez plusieurs routes, vous devez également rechercher quelque chose comme express, car le module http n'inclut pas le routage.

+0

Comment lire l'entrée pour le code ci-dessus en utilisant stdin –

+0

stdin est un peu plus compliqué, parce que vous ne savez pas si tout le stdin en lecture. Jetez un oeil à https://gist.github.com/kristopherjohnson/5065599 ou à un module comme https://www.npmjs.com/package/get-stdin – Julian

+0

process.stdin.on ('readable',() => { path = process.stdin.read(); console.log (chemin); }); incapable de lire en utilisant stdin –