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

时间:2014-02-17 22:47:44

标签: node.js mongodb compoundjs jugglingdb

我正在使用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客户端,而不是自己重新创建连接?

1 个答案:

答案 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连接到数据库,这可能导致初始化程序在适配器完全连接之前运行。