2017-10-20 1 views
-3

Je reçois deux URL dans req.url dans la fonction http.creatServer().
Si je console l'URL actuelle, il affiche "/favicon.io" et "/test.txt".
Je souhaite afficher le contenu du fichier "text.txt" lorsque l'utilisateur essaie d'ouvrir l'URL "http://localhost:3000/test.txt". Voici mon coderequest.url affichant deux URL dans node.js

var fs = require('fs'); 
var PORT = process.env.PORT || 3000; 
var http = require('http'); 

http.createServer(function(req,res){ 
    res.writeHead(200, {'Content-type' : 'text/plain'}); 
    console.log('----',req.url); 
if(req.url === "/test.txt"){ 
    fs.createReadStream(__dirname + "/test.txt").pipe(res); 
} 
else 
{ 
    res.end('Hello World!!'); 
} 
}).listen(PORT); 

console.log('Server Running at port ' + PORT); 
+0

quel est le problème? –

+0

votre console.log va se déclencher à chaque requête. Vous verrez donc d'autres URL si ces demandes arrivent également. vous devez effectuer une vérification plus robuste sur le fichier req.url que juste == '/test.txt' – Cruiser

+0

Je ne suis pas en mesure d'entrer la première condition "req.url === /text.txt" car il y a deux URL dans req.url. Je veux juste imprimer le contenu du fichier texte en réponse sinon simple "bonjour monde" .Voici une capture d'écran http://prntscr.com/gztb42 –

Répondre

0

Ohh..got votre problème. Le nœud est un langage de programmation piloté par événement asynchrone. donc il ne faudra pas attendre que le contenu du fichier soit lu par l'opération de requête. Il va exécuter une autre requête et votre autre demande est favicon en pipeline. donc il retournera toujours faux. de sorte que vous obtiendrez hello world à chaque fois.

Utilisez cette page et vérifiez

if('txt' == req.url.split('.')[1]){ var read = fs.readFileSync(__dirname + "/test.txt"); res.end(read.toString()); }