在我的ExpressJS应用程序中,我有两条到同一位置的路线,一条用于“获取”,另一条用于“发布”。
在'get'页面上,它通过MongooseJS从我的MongoDB集合中转储所有文档,然后是一个表单,用于向集合添加新记录。
在“发布”页面上,它会接收表单数据并将其添加到集合中,然后显示您通过“获取”看到的相同页面。
它可以工作,但在提交表单后,除非我重新加载页面,否则不会显示新记录。我把渲染页面的代码放在最底层,在将数据添加到集合的部分下面,所以在我看来它应该可以工作,但事实并非如此。
exports.index = function(req, res){
Server.find({},
function(err, docs) {
if (!err){
res.render('servers', { title: 'verify', results: docs});
}
else { console.log(err);}
}
);
}
exports.add = function(req, res){
newServer = new Server({
name: req.body.name,
os: req.body.os,
osVersion: req.body.osVersion
});
newServer.save(function (err) {
if (err) {
console.log(err);
}
});
Server.find({},
function(err, docs) {
if (!err){
res.render('servers', { title: 'verify', results: docs});
}
else { console.log(err);}
}
);
}
答案 0 :(得分:0)
好吧,我似乎在回调中犯了这个错误。我解决了这个问题。
exports.add = function(req, res){
newServer = new Server({
name: req.body.name,
os: req.body.os,
osVersion: req.body.osVersion
});
newServer.save(function (err) {
if (err) {
console.log(err);
} else {
Server.find({},
function(err, docs) {
if (!err){
res.render('servers', { title: 'verify', results: docs});
}
else { console.log(err);}
}
);
}
});
}
答案 1 :(得分:0)
是的,这些数据库查询是异步的,因此回调将解决此问题。但是,您应该考虑使用promises。 Mongoose默认返回promises,或者您可以导入您选择的库。在处理嵌套回调和查询以及错误处理时,它们会派上用场。