0

私は、マングースなしで、express.js アプリケーションを開発しています。

私がやろうとしているのは、mongodb への呼び出しを関数内にカプセル化し、関数にパラメーターを渡して、mongodb からデータを取得することです。

私が直面している問題は、以下のコードで説明されています

function get_data()
{
    var mongo = require('mongodb'),Server = mongo.Server,Db = mongo.Db;
    var server = new Server('localhost', 27017, {auto_reconnect: true});
    var db = new Db('test', server); 

    db.collection('test_collection', function(err, collection) {

        collection.find().toArray(function(err, items) {
            var data = items;
        });
    });

    console.log(data);
    console.log("in get");
    return data;
}

この関数からmongo dbから取り出したアイテム配列を返すにはどうすればよいですか。

javascript でスコープがどのように機能するか、また項目を変数に入れて get_data 関数から返す方法を知りたいです。

答えた後

コードを修正しました。これで動作し、次のようになります。

function get_data(callback) { 
    var mongo = require('mongodb'),Server = mongo.Server,Db = mongo.Db;
    var server = new Server('localhost', 27017, {auto_reconnect: true});
    var db = new Db('test', server);

    db.open(function(err, db) {
        if (err) return callback(err);

        db.collection('test_collection', function(err, collection) {
            if (err) return callback(err);
            collection.find().toArray(callback);
        });
    });
}


get_data(function(err, items) {
    // handle error
    console.log(items);
});
4

1 に答える 1

0

項目は MongoDB から非同期的に取得されるため、関数get_dataは結果を返すために使用されるコールバックを受け入れる必要があります。openデータベース接続も明示的にする必要があると思います。

function get_data(callback) {
    ...

    db.open(function(err, db) {
        if (err) return callback(err);

        db.collection('test_collection', function(err, collection) {
            if (err) return callback(err);
            collection.find().toArray(callback);
        });
    });
}

get_data(function(err, items) {
    // handle error
    console.log(items);
});
于 2012-08-03T20:10:28.877 に答える