如何从发布请求中检索数据

时间:2019-02-03 12:25:46

标签: node.js express

我有一个发布请求,打算在检索当前值后更新一个字段。

我正在尝试更新mongodb中的字段。该字段是布尔数据类型。

router.route('/books/update/:id').post((req, res) => {
Book.find({ id: parseInt(req.params.id) }, (err, books) => {
    if (!books)
        return next(new Error("Could not load book!"))
    else {
        console.log(books);
        console.log(req.body);
        // let book = new Book(req.body);
        // console.log('Before ', book.title);
        // book.completed = !book.completed
        // console.log('After ', book.completed);

        // book.save().then(book => {
        //     res.json("Update done.");
        // }).catch(err => {
        //     res.status(400).send('Update failed');
        // })
    }
});
});

我正在使用邮递员,我在体内传递的数据是

{
    "id" : 1,
    "title" : "Read Romeo And Juliet",
    "completed" : false
}

console.log (books)时可以查看json结果集。请求req.body为空。为什么会这样呢?正如您在注释的代码中看到的那样,我试图设置完成的字段并将其更新回集合。最好的方法是什么。谢谢。

2 个答案:

答案 0 :(得分:2)

可能有两个原因。首先,如果它是一个快速应用程序,请确保您具有一些正文解析中间件,以将http请求的正文解析为有效的js对象(如果愿意,可以使用JSON)。例如,当今最受欢迎的是this one。如果已安装并正确配置了它,请确保您的请求在Postman请求标头部分中将“ Content-Type”标头设置为“ application / json”。祝你好运!

// create application/json parser
var jsonParser = bodyParser.json()

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

答案 1 :(得分:0)

我在Book模型上使用了updateOne函数,

router.route('/books/update/:id').post((req, res) => {

    bookId = parseInt(req.params.id);

    Book.findOne({ id: bookId }, (err, book) => {
        if (!book)
            return next(new Error("Could not load book!"))
        else {
            let book = new Book(req.body);
            book.completed = !book.completed

            Book.updateOne({ id: bookId }, { "completed": book.completed }, function (err, raw) {
                if (err) {
                    res.send(err);
                }
                else {
                    res.json("Update done.");
                }
            });
        }
    });
});