2014-06-10 69 views
1

客戶當身體搞砸:的Node.js透過JSON.stringify

$.ajax({ 
    url: some_url, 
    type: 'post', 
    dataType: 'json', 
    data: JSON.stringify({myArray: []}) 
    ... 
} 

$.ajax({ 
    url: some_url, 
    type: 'post', 
    data: {myArray: []} 
    ... 
} 

服務器:

var app = express(); 
app.use(bodyParser()); // body-parser module 
app.use(function(req, res, next){ 
    console.log(req.body); 

    // When stringified, prints: { '{"myArray":': { ']': '' } } 
    // When not stringified, prints: {} 

}); 

我明白,因爲我的數組是空的,它沒有公佈,但我我完全搞不清楚爲什麼當字符串化時輸出很混亂。它是由身體分析器引起的嗎?

我想要做的就是檢索我的數組並在其上循環。如果它是空的,那就這樣吧。

謝謝!

回答

2

首先,dataType隻影響服務器響應。它與請求數據無關。

其次,損壞的對象的原因是,默認情況下,jQuery的ajax()發送Content-Typeapplication/x-www-form-urlencoded。此外,body-parser中間件將默認使用qs npm模塊來解析application/x-www-form-urlencoded,而不是內置的querystring節點模塊。 qs模塊支持上述和超出querystring的功能,包括嵌套語法(例如foo[bar]=bazfoo[]=baz)。所以qs看到[,並認爲它是嵌套語法的開始。從那裏,它取決於qs的執行情況,以確定輸出格式不正確。

3

bodyParser()中間件解碼基於請求的Content-Type頭,可與contentType option設置:

data: JSON.stringify({ myArray: [] }), 
contentType: 'application/json', 

,而不指定的contentType是JSON,解析器會試圖解碼基於URL的默認 - 編碼,導致您看到的body結構。

+0

我接受了mscdex的答案,因爲它解釋了爲什麼身體如此混亂,但你的答案是一樣好,如果可以的話,我會接受。 –