node.js mongodb javascript范围混乱

时间:2012-08-03 20:02:49

标签: javascript node.js mongodb express

我正在开发一个没有mongoose的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);
});

1 个答案:

答案 0 :(得分: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);
});