node-mongodb-native,callback,scope和TypeError

时间:2012-08-07 19:30:44

标签: javascript node.js mongodb node-mongodb-native

这是一个小故事。

曾几何时,一个小项目想要使用node-mongodb-native。但是,它非常害羞,它想要使用包装器对象隐藏它。

var mongodb = require( 'mongodb' ),
    Server = mongodb.Server,
    Db = mongodb.Db,
    database;

var MongoModule = {};

MongoModule.setup = function() {
    // Create a mongodb client object
    var client = new Db( this.config.databaseName,
        new Server(
            this.config.serverConfig.address,
            this.config.serverConfig.port,
            this.config.serverConfig.options
        ),
        this.config.options
    );

    // Open the connection!
    client.open( function( err, db ) {
        if ( err ) throw err;
        database = db;
        console.log( 'Database driver loaded.' );
    });
};

setup方法是启动小项目的一种方法。它在应用程序运行时被调用。

为了尝试自己,小项目为collection的{​​{1}}方法添加了一个包装方法。

node-mongodb-native

然而,小项目发现这种方法不起作用。它不明白为什么!

MongoModule.collection = function() {
    database.collection.apply( this, arguments );
};

错误如下,即使小项目不认为它是相关的。他最好的朋友谷歌没有发现任何有用的结果,而是一个旧的修复错误。

// In the client.open callback:
db.collection( 'pages', function( e, p ) {
    // no error, works fine
});

// in the same callback:
MongoModule.collection( 'pages', function( e, p ) {
    // error :(
});

PS:如果你想要一个失败的文件,here is a gist

1 个答案:

答案 0 :(得分:3)

您需要在collection对象而不是database对象的上下文中应用方法MongoModule

database.collection.apply( database, arguments );