如何在compoundjs初始化期间从jugglingdb适配器获取本地mongodb客户端?

我正在使用compoundjs和使用jugglingdb的mongodb适配器。 我一直在检索和重用控制器中的本地mongodb客户端 ,通过执行以下操作:

var db = compound.orm._schemas[0].client; 

这很好,因为我可以使用mongodb支持的函数,比如.collection(name).find() 。 但是,当我为compoundjs创build初始化程序时, .client为空,但看起来像_schemas[0]不是。 例如:

 module.exports = function (compound) { var db = compound.orm._schemas[0].client; // _schemas[0] isn't empty as .client was reached. db.collection('collection'); // Throws: TypeError: Cannot call method 'collection' of undefined }; 

如何从jugglingdb适配器中检索本地mongodb客户端,而无需自己重新创build连接?

这可以通过使用来自JugglingDB事件发射器的connected事件来完成。

 module.exports = function (compound) { compound.orm._schemas[0].once('connected', function () { var db = compound.orm._schemas[0].client; db.collection('Module'); }); }; 

说明:

当JugglingDB加载一个适配器时,它会传入一个完成的callback, 触发连接的事件 。 加载mongo适配器时,适配器使用asynchronous调用来连接到数据库,这可能导致初始化器在适配器完全连接之前运行。