2017-07-27 57 views
0

我試圖建立一個基本的靜態Web服務器,很簡單的一個,幾行字,處理3名的請求,圖標的路徑規則,JS和html文件:什麼的NodeJS

項目struture:

在server.js
-D: 
    -project 
    -build 
     -index.html 
     -fav.icon 
     -dist.js 
    -server.js 

代碼

http.createServer(function(req, res) { 
    //create dynamic filepath for response via requests MIME type 
    let filePath = './build' + req.url; 
    fs.access(filePath, callback(err){ 
    console.log(err); 
    res.writeHead(200, {'Content-Type': contentType}); 
    let file = fs.createReadStream(__dirname + filePath); 
    file.pipe(res); 
    }); 
}); 

奇怪的是,文件路徑,昨晚的工作我記得,但我不知道發生了什麼事或什麼,我已經改變了,它不工作了。所以我試圖調試它,現在控制檯會顯示:

'no such file...D:\project.\build\' 

有一個'。'之前「\建設」那裏,所以我試圖刪除此:

let filePath = '/build' + req.url; 

然後它會顯示

'no such file...D:\build\' 

哪裏是「項目」目錄?再次,去掉 '/' brfore '構建':

let filePath = 'build' + req.url; 

'項目' 回來:

'no such file...D:\projectbuild\' 

我試圖用path.resolve(__目錄名稱,絕對路徑)和path.join(__目錄名,相對路徑),他們都返回相同的。

我不知道爲什麼我昨晚可以訪問我的服務器,但不是今天,我記得在某處我看到一個鏈接到'節點文件路徑規則'或'節點文件訪問規則'類似的東西,我GOOGLE了它試圖在節點文檔中搜索,但沒有運氣,那麼在Node中訪問路徑的規則是什麼?

回答

1

好的,所以__dirname將成爲您正在運行的文件的目錄。例如,如果您當前的工作目錄是D:\project並且您運行的是node server.js,則__dirname將返回「D:\ project」,如您所期望的那樣。但是,如果您當前的工作目錄實際上是D:\並且您運行的是node project\server.js,那麼您可能不會期望得到「D:\ project」的結果。

在你正在做什麼的情況下,你想加入「__dirname」和「build」,最後加上文件名。如果req.url是「index.html」,則要讀取位於__dirname + \ + build + \ + index.html的文件。

所以,你要尋找的加入功能將是這樣的:

var fileUrl = path.join(__dirname, 'build', req.url); 

path.join功能應處理標準化的平臺等。

+0

謝謝你的答案,它的工作原理,所以爲了進一步的用法,你能告訴我'/ build'和'./build'是什麼意思,我想了解更多關於Node文件訪問路徑規則。 –

+1

對於那些東西,節點只遵循Unix路徑標準。因此,以斜槓開始的路徑意味着「從根目錄開始」。在Windows上,/ build會因此表示D:\ build,如果您在D驅動器中。從一個點開始,斜槓意味着「從當前目錄開始」。因此,如果您在D:\ projects中並且您說./build,則路徑將爲D:\ projects \ build。您可以通過進入Node REPL和調用路徑來使用它。解析()你想要嘗試的任何字符串路徑片段。 – Paul