在POST请求结束之前,无法访问最近保存的数据 - node.js

时间:2018-05-29 18:35:32

标签: node.js mongoose

最近我遇到了一个问题,我无法在node.js中使用MongoDB(mongoose)进行最近的插入。

    app.post("/addEvent", (req, res) => {
    var myData = new Event(req.body);
    myData.save().then(item => {
        res.send("Event saved to database!");
    })
    .catch(err => {
        res.status(400).send("Unable to save to database");
    });

    Event.find({categoryName:req.body.categoryName}, function(err, events) {
        if (err) throw err;

        Car.find({categoryName:req.body.categoryName}, function(err, cars) {
            if (err) throw err;

            /**some_code_here**/

        });
    });

    some_foo(app, req.body.categoryName);
    res.redirect(301, '/groups' + req.body.categoryName);  
});

因此,当我尝试通过Event.find({})收集所有事件时,我得到零事件。 但是在请求结束后,我可以在数据库中看到我的事件。 我想要的是访问POST请求中最近添加的事件。 有任何想法吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

如果要搜索最近保存的事件,则必须等待myData.save()函数的回调。如果你不等,它将在你的myData.save()

的parralel中触发Event.find()

尝试:

        app.post("/addEvent", (req, res) => {
            var myData = new Event(req.body);
            myData.save().then(item => {
                //res.send("Event saved to database!");

                Event.find({categoryName:req.body.categoryName}, function(err, events) {
                if (err) throw err;

                Car.find({categoryName:req.body.categoryName}, function(err, cars) {
                    if (err) throw err;

                    /**some_code_here**/

                });

                some_foo(app, req.body.categoryName);
                res.redirect(301, '/groups' + req.body.categoryName);  
                })
            });
            .catch(err => {
                res.status(400).send("Unable to save to database");
            });
        });

如果你想在res.redirect()之前等待你的Car.find(),你必须等待Car.find()回调...... 欢迎来到'回调地狱'(你可以在google上搜索)。

在最近的nodejs版本中,您可以使用await / async functionnality来帮助您。请参阅示例:https://blog.risingstack.com/mastering-async-await-in-nodejs/