我在编写我的第一个节点应用程序时遇到了问题,我的回调被调用,然后才真正完成对数据库的写入。
方案是,当经过身份验证的用户转到url site.com/model时,将查询数据库以查看是否存在属于该用户的模型。如果有,则显示给用户。如果没有,则用户被重定向到具有可以提交的表单的site.com/model/create。提交该表单后,模型将保存到数据库,用户将重定向到site.com/model,在那里显示新创建的对象。问题是,在下面的代码中,保存回调中的重定向发生在写入完成之前。这意味着在提交新模型后将用户重定向到site.com/model时,新模型尚未写入,这意味着它们会再次重定向回site.com/model/create,但是如果我等待并刷新页面,模型已创建。知道如何在重定向之前确保写入完成吗?对不起,如果我的问题不明确,我很乐意回答问题以便清理。
router.get('/model', isLoggedIn, function(req, res) {
Model.findOne({'owner': req.user.username}, function(err, card) {
if(err) {
}
if(model) {
res.render('model', {
user : req.user,
model : model
});
}
else {
res.redirect('/model/create');
}
});
});
router.get('/model/create', isLoggedIn, function(req, res) {
Model.findOne({'owner': req.user.username}, function(err, card) {
if(err) {
}
if(model) {
res.redirect('/model');
}
else {
res.render('model/create', {
user : req.user
});
}
});
});
router.post('/model/create', isLoggedIn, function(req, res) {
req.body.model.save(function(err) {
if(err) {
throw err;
}
res.redirect('/model');
});
});
答案 0 :(得分:0)
req.body.model
很可能是客户端发送的表单数据(转换为JSON)。我不确定它是如何在您的代码中调用.save
方法的。
通常您应该使用此数据创建新的模型实例并保存:
new Model(req.body.model).save(...)