这是一个小故事。
曾几何时,一个小项目想要使用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。
答案 0 :(得分:3)
您需要在collection
对象而不是database
对象的上下文中应用方法MongoModule
:
database.collection.apply( database, arguments );