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