Node.js (with express & bodyParser): unable to obtain form-data from post request

£可爱£侵袭症+ 提交于 2019-11-26 09:49:44

问题


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]

  1. 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 your package.json, and then perform a npm update.

  2. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!