Mongoose / BodyParser未正确接受urlencoded POST请求

时间:2018-03-06 05:02:58

标签: node.js mongodb express mongoose body-parser

我主要关注这两个(可疑的)类似的教程来学习后端Web开发。

https://scotch.io/tutorials/build-a-restful-api-using-node-and-express-4#disqus_thread

http://scottksmith.com/blog/2014/05/05/beer-locker-building-a-restful-api-with-node-crud/

但是,当我到达您接受帖子请求以编辑数据库的部分时,我遇到了问题。我相信我已正确设置了body-parser

app.use(bodyParser.urlencoded({
    extended:true}));

我相信我正确处理了请求。

var itemRouter = router.route('/items');

//Creating an endpoint for POSTS /api/beers
itemRouter.post(function(req, res){
    console.log(req.body); //This always returns {}
    var newItem = new Item();
    newItem.name = req.body.name; //These two lines of code are replaced in the working JSON version
    newItem.quantity = req.body.name; //These two lines of code are replaced in the working JSON version

    //Saves the new item to the database
    newItem.save(function(err){
        if(err) {
            res.send(err);
        }
        //sends a response

        res.json({
            message: 'Item added to the database!',
            data: newItem
        });
    });
});

然而,显然出现了问题。我使用postman使用{Content-Type : "application/x-www-form-urlencoded" }向我的服务器发送请求,但是它没有正确地将该信息作为console.log发送,我总是返回一个空对象,显示没有来自身体正在达到这一点。

我可以通过用

替换标记的两行来正确处理JSON格式的输入
newItem.name= req.body[0].value;
newItem.quantity = req.body[1].value;

但是,我想解决这个问题并从中学习,而不是破解解决方法。我在下面的要点上附上了完整的源代码。提前感谢您的帮助!

https://gist.github.com/anonymous/3a96bb30fd29a5c6852b77acac9963df

这就是我在数据库中获得的内容:

{"id":"5a9e0d9f5ecb6825b8d68544","_v":0}

这是我希望在我的数据库中获得的内容:

{"id":"5a9dff951281120fac21aa18","name":"Pepperoni Pizza","quantity":8,"_v":0}

2 个答案:

答案 0 :(得分:1)

您必须将body-parser设为

 // set bodyparser for accepting json value
    app.use(bodyParser.json())

// parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false }))

// then rest code here

答案 1 :(得分:0)

邮递员的更新和重新启动修复了该问题。我能够确认我的原始代码和流程在其他设备上运行。