Express js req.body returns empty

后端 未结 2 1629
南笙
南笙 2021-01-18 23:57

I\'ve tried the all solutions from some another stackoverflow posts but it didn\'t solved my issue.

Here is my app.js

var express = requ         


        
相关标签:
2条回答
  • 2021-01-19 00:06

    body-parser

    The bodyParser object exposes various factories to create middlewares. All middlewares will populate the req.body property with the parsed body, or an empty object {} if there was no body to parse (or an error was returned).


    app.use(bodyParser.urlencoded({ extended: true })); // for encoded bodies
    

    A new body object containing the parsed data is populated on the request object after the middleware, req.body will contain the parsed data, this object will contain key-value pairs, where the value can be a string or array

    The Content-Type is application/x-www-form-urlencoded


    app.use(bodyParser.json()); // for json encoded bodies
    

    A new body object containing the parsed data is populated on the request object after the middleware (i.e. req.body).

    The Content-Type is application/json


    application/json is used when you are posting the data {"test":"hello"} like this. www-form-url-encoded is used to get the data as key-value in object from the url when used the app.use(bodyParser.urlencoded({ extended: true }));. They both are different and have their own use cases

    0 讨论(0)
  • 2021-01-19 00:20

    After removing the last 4 lines of code (to be sure you are configuring correctly the routes) and adding this test lines:

    app.post('/ping', function (req,res) {
        console.log(req.body);
        res.send('ok ' + req.body.test);
    });
    let server = http.createServer(app);
    server.listen(8899, function onstart() {
        console.log('server listening');
    });
    

    When I run:

    curl -X POST http://localhost:8899/ping -d '{"test": 1234}'
    

    I get ok undefined, like you did. After adding the proper content-type header:

    curl -X POST http://localhost:8899/ping -d '{"test": 1234}' -H "content-type: application/json"
    

    it works like a charm and I get ok 1234. So I think you are missing the "content-type: application/json" header in your postman.

    0 讨论(0)
提交回复
热议问题