2015-05-07 69 views
0

我想只使用節點(沒有額外的npms或快遞)。這是我目前的路由處理:服務靜態文件節點

function requestHandler(req, res) { 

    var localFolder = __dirname + '/views/', 
      page404 = localFolder + '404.html', 
      fileToServe = ""; 

    if(/\/posts\/\d+/.test(req.url)){ 
     fileToServe = __dirname + req.url.match(/\/posts\/\d+/) +'.json'; 
     fs.stat(fileToServe, function(err, contents){ 
      if(!err && contents){ 
       res.end(templateEngine('post',fileToServe)); 
      } else { 
       res.end(templateEngine('error', err)) 
      } 
     }); 
    } else if (/\/posts\//.test(req.url)){ 

    } else if (/.+[^\W]$/.test(req.url)){ 
     fileToServe = __dirname + '/views' + req.url.match(/\/.+[^\W]$/gi); 
     fs.stat(fileToServe, function(err, contents){ 
      if(!err && contents){ 
       res.end(fs.readFileSync(fileToServe)); 
      } else { 
       res.end(templateEngine('error', err)) 
      } 
     }); 
    } 
} 

我有兩個問題:

在我的意見之一,如果有一個<link>標籤與CSS文件。當我直接進入路徑時,它被提供(這是正則表達式:/.+[^\W]$/.test(req.url))。但是,如前所述,從模板引擎構建的一個視圖使用css文件。

瀏覽器如何工作當它看到鏈接標記?它是否發送一個GET請求到我的本地服務器(節點)?如果是這樣,爲什麼我的服務器沒有發送迴應?當我直接進入鏈接時,它會發送完美的響應

此外,當我嘗試去鏈接標籤中使用css文件的頁面時,它只是掛在一個空白頁面上,當我殺死服務器時,它說它從來沒有收到響應(再一次,當我直接去鏈接,我得到正確的文件)。

我必須重新組織我的路線嗎?分別提供靜態文件?

+0

它是否使用正確的內容類型發送響應? –

+0

當我直接打它它。當我轉到在鏈接標籤中使用它的頁面時,「GET」請求只是「掛起」,如果我得到了回覆,我會認爲它是正確的內容類型。 – HelloWorld

回答

2

當瀏覽器看到鏈接標記時如何工作?它是否向我的本地服務器(節點)發送GET請求?

是的。瀏覽器根據當前URL創建完整的URL,併爲其他任何資源發出HTTP GET請求。

如果是這樣,爲什麼我的服務器沒有發送迴應?當我直接進入鏈接時,它會很好地發送響應。

所有證據都表明,鏈接到css的頁面沒有在處理程序if-blocks中被捕獲。試着把幾個console.logs,一個放在requestHandler裏面,另一個放在應該處理頁面請求的塊中。我想你只能在服務器控制檯看到一個日誌顯示。