我正在使用compoundjs并使用jugglingdb的mongodb适配器。我通过执行以下操作检索并重用控制器中的native mongodb client:
var db = compound.orm._schemas[0].client;
这很有用,因为我可以使用mongodb支持的功能,例如.collection(name)
和.find()
。但是,当我为compoundjs创建初始化程序时,.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客户端,而不是自己重新创建连接?
答案 0 :(得分:2)
这可以通过使用JugglingDB事件发射器中的connected
事件来完成。
module.exports = function (compound) {
compound.orm._schemas[0].once('connected', function () {
var db = compound.orm._schemas[0].client;
db.collection('Module');
});
};
<强>解释强>
当JugglingDB加载适配器时,它会传入一个完成的回调,triggers the connected event。加载mongo适配器时,适配器使用async call连接到数据库,这可能导致初始化程序在适配器完全连接之前运行。