2015-12-23 69 views
1

發送到我的Express服務器我對Node.js的Express服務器基本安裝困惑請求路徑是從AJAX

我試圖用res.sendFile HTML文件,使用該路由處理服務:

router.get('/:run_id/:test_num',function(req,res,next){ 

    var runId = req.params.run_id; 
    var testNum = req.params.test_num; 

    res.sendFile(path.resolve('results',runId,testNum),{ 
     maxAge:'58h' 
    }); 

}); 

在我的app.js文件,我有這樣的中間件

app.use('/results', require('./routes/results')); 

的問題是,該請求被路由像這樣:

pathname: '/results/results/1450830953375/test6.txt', 
    path: '/results/results/1450830953375/test6.txt', 
    href: '/results/results/1450830953375/test6.txt' 

所以問題是,它是/results/results/,而不是僅僅/results

我使用RequireJS和包含文件的數據是請求模塊如下所示:

define('SumanTestFiles',function(){ 
      return new Object(["results/1450830340344/test5.txt","results/1450830340344/test6.txt"]); 
    }); 

然後循環遍歷每個文件路徑並使用jQuery/AJAX從服務器請求它:

define(['SumanTestFiles'],function(stf){ 

    stf.forEach(function (testPath) { 
     $.get(testPath).done(function (msg) {... 

so你可以看到testPaths沒有被篡改,它們毫無疑問只是「結果/ 1450830340344/test5.txt」,或類似的東西。

所以我的問題是,爲什麼路徑顯示在我的服務器上有兩個相鄰的'結果'字符串實例在路徑中?

它沒有很大的意義,因爲該請求應該只是

/results/1450830953375/test6.txt

/結果/結果/1450830953375/test6.txt

any hav hav有什麼想法?感謝

+0

你在哪裏登錄請求路徑? – jmar777

+0

謝謝,它記錄在服務器上,服務器輸出是3行以上(路徑名,路徑,href) –

+0

我相信如果你改變'path.resolve('results',runId,testNum)''只是'path.resolve (runId,testNum)'這可能工作。它試圖解析路徑'/ results/runId/testNum',但你已經路由了'/ results'。不是100%確定,但爲什麼這是一個評論。 – aug

回答

1

這是新的給我,因爲我還算新的Web開發

簡短的回答是,不是這樣的:

define('SumanTestFiles',function(){ 
      return new Object(["results/1450830340344/test5.txt","results/1450830340344/test6.txt"]); 
    }); 

我需要這樣做

define('SumanTestFiles',function(){ 
      return new Object(["/results/1450830340344/test5.txt","/results/1450830340344/test6.txt"]); 
    }); 

否則我的服務器的AJAX請求路徑將相對於搜索欄中的URL而不是絕對路徑。這是令人困惑的廢話。

+1

不錯的工作和+1。由於我沒有更好的辦法,所以我想指出的是將一個數組傳遞給Object的構造函數調用沒有任何作用。構造函數將返回數組本身而不復制它,所以你可以完全移除構造函數調用。 – Shashank

+0

謝謝,我只是在我的IDE中爲語法突出顯示的「新對象」的東西:)我認爲新的對象構造函數基本上是一個無操作,如果參數已經是一個對象類型,所以你是對的,我可能會刪除新的對象調用 –