2016-10-02 7 views
0

クエリから返された文書の数を返すにはどうすればよいですか?NodeJSのmongooseで文書数を返す

router.post('/facebookLogin', function(req, res, next){ 
    var User=require('../models/user'); 
    var a=User.facebookUserExist(req.body.id, req.body.email); 
    console.log(a); 
    res.end(); 
}); 

そしてここにあるUserモデルファイルの内容::私はカウント方式で出力変数の値を設定し

var User=function(data){ 
    this.data=data; 
} 
User.prototype.data={}; 
User.prototype.facebookUserExist=function(id, email){ 
    var output; 
    db.collection('users').find({ 
     $or:[ 
      { 
       facebookID:id 
      }, 
      { 
       email:email 
      } 
     ] 
    }).count(function(err, numOfDocs){ 
     output=numOfDocs; 
    }); 
    return output; 
} 
module.exports=new User; 

は、私は、次のコードを持っているルーティングファイルを、持っていますコールバックが返されますが、関数は未定義のまま返します。

+2

1. 'find'と' count'を使う必要はありません。同じフィルタで 'count'だけ使うことができます。 2.コールバックメソッドを非同期メソッドとして使用しているため、定義されていません。 – TomG

答えて

1

JavaScriptは非同期であり、結果を待つことはありません。だからここで、使用するコールバックやプロミスオブジェクトのどちらかかもしれないが、あなたのコード

router.post('/facebookLogin', function(req, res, next){ 
    var User=require('../models/user'); 
    User.facebookUserExist(req.body.id, req.body.email, function(err, count) 
     if(err) 
      console.log('Error ', err); 
     else 
      console.log(count); 
     res.end(); 
    }); 
}); 

のコールバックの一例であり、あなたのUserモデルが最後の引数としてコールバックを取る

var User=function(data){ 
    this.data=data; 
} 
User.prototype.data={}; 
User.prototype.facebookUserExist=function(id, email, callback){ 
    var output; 
    db.collection('users').find({ 
     $or:[ 
      { 
       facebookID:id 
      }, 
      { 
       email:email 
      } 
     ] 
    }).count(function(err, numOfDocs){ 
     callback(err, numOfDocs); 
    }); 
    //return output; 
} 
module.exports=new User; 
+0

関数の戻り値を待つコードを作成できません。 – kukko

+0

私はpromiseオブジェクトを使用しようとすると、常に保留状態になり、thenメソッドは実行されません。 – kukko

+0

@kukko return文は関数の完了を待つことはありません。コールバック(私の答えで説明したように)とPromiseオブジェクト –

0

.count()を取得するために必要とされますMongoDBの全ドキュメントそれは助けるかもしれない。

USER.find(req.body.id, req.body.email).count(function(err, count) { 
    console.log("Number of docs: ", count); }); 
関連する問題