问题
I can\'t seem to recover the form-data of a post request sent to my Node.js server. I\'ve put below the server code and the post request (sent using postman in chrome):
Post request
POST /api/login HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name=\"userName\"
jem
----WebKitFormBoundaryE19zNvXGzXaLvS5C
NodeJS server code
var express = require(\'express\'); // call express
var app = express(); // define our app using express
var bodyParser = require(\'body-parser\');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(bodyParser());
app.all(\'/*\', function(req, res, next) {
res.header(\'Access-Control-Allow-Origin\', \'*\');
res.header(\'Access-Control-Allow-Headers\', \'Content-Type,accept,access_token,X-Requested-With\');
next();
});
var port = process.env.PORT || 8080; // set our port
var router = express.Router(); // get an instance of the express Router
router.get(\'/\', function(req, res) {
res.json({ message: \'I am groot!\' });
});
// Login
router.route(\'/login\')
.post(function(req, res){
console.log(\'Auth request recieved\');
// Get the user name
var user = req.body.userName;
var aToken = getToken(user);
res.json({
\'token\':\'a_token\'
});
});
app.use(\'/api\', router);
app.listen(port);
The login method tries to obtain the req.body.userName
, however, req.body
is always empty.
I\'ve seen other cases on SO describing such behavior but none of the related answers did apply here.
Thanks for helping out.
回答1:
In general, an express app needs to specify the appropriate body-parser middleware in order for req.body
to contain the body.
[EDITED]
If you required parsing of url-encoded (non-multipart) form data, as well as JSON, try adding:
// Put this statement near the top of your module var bodyParser = require('body-parser'); // Put these statements before you define any routes. app.use(bodyParser.urlencoded()); app.use(bodyParser.json());
First, you'll need to add body-parser to the
dependencies
property of yourpackage.json
, and then perform anpm update
.To handle multi-part form data, the
bodyParser.urlencoded()
body parser will not work. See the suggested modules here for parsing multipart bodies.
回答2:
To handle multipart/form-data request that support file upload, you need to use multer module. npm link for multer middleware
回答3:
Make sure to put in this order:
bodyParser.json() first.
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
来源:https://stackoverflow.com/questions/26347394/node-js-with-express-bodyparser-unable-to-obtain-form-data-from-post-reques