2017-10-20 92 views
-3

我在http.creatServer()函數的req.url中找到兩個url。
如果我控制當前的網址,它會顯示「/favicon.io」和「/test.txt」。
我想在用戶嘗試打開url「http://localhost:3000/test.txt」時顯示文件「text.txt」內容。 這裏是我的代碼request.url在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

是什麼問題? –

+0

您的console.log將在每個請求中觸發。所以你會看到其他的網址,如果這些請求也進來。你需要對req.url進行更強大的檢查,而不僅僅是=='/test.txt' – Cruiser

+0

我無法輸入第一個條件「req.url === /text.txt」,因爲有兩個url在req.url中。我只是想打印文本文件的內容,否則簡單的「你好世界」。這裏是截圖http://prntscr.com/gztb42 –

回答

0

Ohh.got your problem。 節點是異步事件驅動的編程語言。 所以它不會等待請求操作正在讀取的文件內容。 它將執行另一個請求,你的另一個請求是流水線圖標。 所以它總是會返回false。這樣你每次都會得到hello world

使用這種檢查

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