With recent versions of Express, the recommendation (conveyed through a debug message) is to stop using the bodyParser
middleware. I read a bit, and it looks like bodyParser is a wrapper to the json
and urlencoded
middlewares - and lo and behold, the most recent version of Express (3.4.4) uses these 2 instead of the bodyParser
out of the box - splendid, right?
But now, I can't get to my fields. req.body
is undefined. Here's my JS form submission code (text fields only, no files). Could someone please tell me which property/function of req
do I use to get at the values?
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);
}
});
The issue is that, when sending FormData
, the Content-Type
will be multipart/form-data
.
Though you're using express.json()
and express.urlencoded()
, each of them only acts on particular Content-Type
s -- application/json
and application/x-www-form-urlencoded
, respectively.
And Express/Connect will be removing built-in support for multipart()
and parsing of multipart/form-data
content in the future due to security concerns. They instead recommend using:
- formidable
- connect-multiparty or multiparty
- connect-busboy or busboy
So, for future support of FormData
and multi-part
in general with Express/Connect, you'll have to use an addition dependency.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With