2014-02-17 2 views
2

Я работаю с complexjs и использую адаптер mongodb jugglingdb. Я извлечение и повторное использование native mongodb client в контроллерах, выполнив следующие действия:Как получить собственный клиент mongodb из адаптера jugglingdb во время инициализации componentjs?

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

Это прекрасно работает, как я могу использовать функции, которые MongoDB носители, такие как .collection(name) и .find() на вершине этого. Однако, когда я создаю инициализатор для составных, .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 
}; 

Как получить нативный клиент MongoDB из адаптера jugglingdb, без повторного подключения самостоятельно?

ответ

2

Это может быть выполнено с помощью события connected от излучателя события JugglingDB.

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 для подключения к базе данных, что может привести к запуску инициализаторов до того, как адаптер полностью подключен.