我尝试向我的数据库添加值,然后使用mongoose find检索数据库。添加了值,但是mongoose find不返回值。以下是我的代码。
app.post('/api/infosave', function(req,res){
async.series([function (cb){
dbinfo.remove({}, function(err,result){
if (err) throw err;
cb(null);
});
}, function (cb){
for (var i=0; i<req.body.numBooks;i++){
dbinfo.create({
numBooks: i+1,
done: false
});
};cb(null)
}, function (cb){
dbinfo.find({},function(err,result){
if (err)
res.send(err);
res.json(result);
console.log(result);
cb(null);
});
}], function(error, results) {
});
});
在我的前端,我想输入我的书籍数量,然后根据书籍数量,列表将会出现。例如: -
Number of books:-5(numBooks in the codes) [SUBMIT BUTTON]
Book number 1:
Book number 2:
Book number 3:
Book number 4:
Book number 5:
上面的代码不起作用,但如果我按F5刷新页面。它会给我正确的前端。
感谢帮助
答案 0 :(得分:0)
您在第二次函数调用中遇到竞争条件,您尝试.create()
模型。 .create()
为回调采用第二个参数。
看起来应该是这样的。在正确创建所有模型之前,您的.series()
功能不应超前。
var bookNum = [];
for (var i = 0; i < req.body.numBooks; i++) {
bookNum.push(i+1)
}
async.map(bookNum, function(num, cb) {
dbinfo.create({
numBooks: i+1,
done: false
}, cb);
}, cb);
为您编写整个代码......
app.post('/api/infosave', function(req, res, next) {
async.waterfall([
function(cb) {
dbinfo.remove({}, cb);
},
function(ignore, cb) {
var bookNum = [];
for (var i = 0; i < req.body.numBooks; i++) {
bookNum.push(i+1)
}
async.map(bookNum, function(num, cb) {
dbinfo.create({
numBooks: i+1,
done: false
}, cb);
}, cb);
}
], function(err, results) {
if (err) return next(err);
res.json(results);
})
});