1

データベースに値を追加してから、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 キーを押してページを更新すると. それは私に右のフロントエンドを与えます。

助けてくれてありがとう

4

1 に答える 1

0

モデルを試行している 2 番目の関数呼び出しで競合状態が発生してい.create()ます。.create()コールバックの 2 番目のパラメーターを取ります。

このように見えるはずです。.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);
    })
});
于 2015-03-23T02:53:34.230 に答える