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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在POST请求结束之前无法访问最近保存的数据 - node.js相关的知识,希望对你有一定的参考价值。

最近我遇到了一个问题,我无法在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请求中最近添加的事件。有任何想法吗?谢谢!

答案

如果要搜索最近保存的事件,则必须等待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/

以上是关于在POST请求结束之前无法访问最近保存的数据 - node.js的主要内容,如果未能解决你的问题,请参考以下文章

.asmx支持post请求或者get请求调用(WebService "因 URL 意外地以 结束,请求格式无法识别" 的解决方法)

python爬虫如何POST request payload形式的请求

请求登录之后的网站的思路

Tomcat 无法解析POST请求的参数

数据无法保存在MSSQL中

微信小程序:wx.request之post请求后端无法获取数据的问题