在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 意外地以 结束,请求格式无法识别" 的解决方法)