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 回答