【问题标题】:node.js mongodb javascript scoping confusionnode.js mongodb javascript 范围混淆
【发布时间】:2012-08-03 20:02:49
【问题描述】:

我正在开发一个 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 中提取的 items Array。

我想知道 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);
});

【问题讨论】:

    标签: javascript node.js mongodb express


    【解决方案1】:

    由于从 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);
    });
    

    【讨论】:

    • 感谢这完全有效。我也在同一个函数中打开了连接。
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2016-02-24
    • 2015-10-04
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多