2013-11-21 95 views
1

我在使用Express時遇到了一個很奇怪的事情,那就是req.params。它可以很好地調用下屬屬性 - 例如:res.json(req.params.paramName);給我所需的paramName值。但是當我試圖通過res.json(req.params)將整個res.params對象傳遞給客戶端時,我只是在瀏覽器中獲得一個空數組[],而不是我期待的JSON對象。 (res.send給出了相同的結果。)Express'req.params的格式是什麼?

看深一點,我甩req.params到控制檯:

console.dir(req.params); 

,並得到這個:

[ creator: '1', timeStart: '2', timeEnd: '3', dateDensity: '4' ] 

WUT?這甚至在JavaScript語法上是可能的嗎? 如果req.params就像快遞代碼和文檔的簡單對象表示,我應該得到:

{ creator: '1', timeStart: '2', timeEnd: '3', dateDensity: '4' } 

像什麼我得到上面甚至應該是可能的,應該是一個數組?

我做了一些合理性檢查,並通過幾個試驗對象到控制檯,以及:

console.dir([{foo:1}, {arr:2}, {gog:3}, {blah:4}]); 
console.dir({foo:1, arr:2, gog:3, blah:4}); 

和控制檯轉儲給我:

[ { foo: 1 }, { arr: 2 }, { gog: 3 }, { blah: 4 } ] 
{ foo: 1, arr: 2, gog: 3, blah: 4 } 

所以console.dir工作OK 。

最後,我硬編碼一個:

res.json({foo:1, arr:2, gog:3, blah:4}); 

到我的快遞代碼和瀏覽器忠實地給我:這裏

{ 
    "foo": 1, 
    "arr": 2, 
    "gog": 3, 
    "blah": 4 
} 

難道我抽菸破解? req.params正在發生什麼?

回答

2

那怎麼V8打印出數組具有字符串鍵:

var myArr = []; 
myArr.key = "oops"; 

記住,[] instanceof Object是真實的。

req.params是一個數組,表明位置參數的可能性。

+0

好的,我認爲這很有道理 - req.params被定義爲一個數組,但實際的參數通過標準的對象屬性存儲在它上,對嗎? – DanHeidel

+0

雖然我對位置參數有點困惑。我認爲JS參數默認通過了positonally。 – DanHeidel

+0

Js函數參數沒有連接來表示請求參數 – Eric