2013-11-26 30 views
6

對於最新版本的Express,建議(通過調試消息傳遞)是停止使用中間件。我讀了一下,它看起來像bodyParser是jsonurlencoded中間件的包裝 - 你看,最新版本的Express(3.4.4)使用這兩個而不是bodyParser開箱即用 - 出色的,對?如何在Express中獲取POST字段,而不使用bodyParser中間件?

但現在,我無法進入我的領域。 req.body未定義。這是我的JS表單提交代碼(僅限文本字段,沒有文件)。有人可以告訴我req的哪個屬性/函數用於獲取值嗎?

var formData = new FormData($('#myForm')[0]); 
$.ajax({ 
    url: '/myurl', 
    cache: false, 
    contentType: false, 
    processData: false, 
    data: formData, 
    type: 'POST', 
    success: function(data) { 
     console.log(data); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.error('Error occured: ' + errorThrown); 
    } 
}); 
+0

您可以改用[Busboy](https://github.com/mscdex/busboy)。 – adeneo

+1

我沒有注意到'bodyParser()'的警告。有一個'multipart()',它已被棄用。所以,你可以直接使用其他2:'app.use(express.json()); app.use(express.urlencoded());'。 –

+0

感謝@adeneo,但有沒有辦法在不包含其他資源的情況下獲取值? –

回答

13

的問題是,發送FormData時,該Content-Typemultipart/form-data

雖然你使用express.json()express.urlencoded(),他們每個人只作用於特定Content-Type秒 - 分別application/jsonapplication/x-www-form-urlencoded

由於安全問題,Express/Connect將刪除內置支持multipart()和將來解析multipart/form-data內容。相反,他們recommend using

因此,爲FormDatamulti-part未來支持一般與快遞/連接,你將不得不使用附加依賴。

+0

已將Ajax post contentType更改爲'application/json',並將這些字段作爲strigified json發送 - 現在它可以工作了!乾杯! –

相關問題