2

2 つのコレクションでデータを取得したい。このデータを 1 回の応答で送信する方法は?

これは私のコードです:

    //RETURN SINGLE QUERYE
exports.findById = function(req, res) {
    //Get Params
    var querye_id =new BSON.ObjectID(req.params.id); 
    var querye;

    //Get Single Querye
    db.collection('queryes', function(err, collection) {
        collection.findOne({'_id':querye_id}, function(err, item) {
            querye=item;
        });

    });
    //Get Questions and Answers
    db.collection('questions', function(err, collection) {
        collection.find().toArray(function(err, items) {
            querye.questions=items;
        });
    });

    //Send Response
     res.send(querye);

};

可変クエリが未定義です。これを解決するには?

4

2 に答える 2

-1

おそらくすべきことは、遅延/約束を使用してウォーターフォール方式で結果を取得し、すべてが完了したときに結果を返すことです。

ノードに非同期ライブラリを使用するのが好きです。

https://npmjs.org/package/async

これにより、すべての非同期関数をキューに入れ、成功/失敗を報告することができます。最後に結果が得られます。

既に async モジュールが必要であると仮定すると、コードは次のようになります。

exports.findById = function(req, res) {
    //Get Params
    var querye_id =new BSON.ObjectID(req.params.id);

    async.waterfall([
        function(callback){
            //Get Single Querye
            db.collection('queryes', function(err, collection) {
                collection.findOne({'_id':querye_id}, function(err, item) {
                    callback(null, item);
                });
            });
        },
        function(arg, callback){
            //Get Questions and Answers
            db.collection('questions', function(err, collection) {
                collection.find().toArray(function(err, items) {
                    arg.questions=items;
                    callback(null, arg);
                });
            });    
        }],function(err, results){
            //Send Response
            res.send(results);
    });
};
于 2013-10-26T16:04:26.470 に答える