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

Я работаю с componentjs и использую адаптер mongodb jugglingdb. Я извлекаю и повторно использую нативный клиент mongodb в контроллерах, выполняя следующие действия:

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

Это прекрасно работает, так как я могу использовать функции, которые поддерживает mongodb, такие как .collection(name) а также .find() более того. Тем не менее, когда я создаю инициализатор для componentjs, .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, не воссоздавая соединение самостоятельно?

1 ответ

Решение

Это может быть достигнуто с помощью connected событие от источника событий JugglingDB.

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

Объяснение:

Когда JugglingDB загружает адаптер, он передает завершенный обратный вызов, который вызывает подключенное событие. При загрузке адаптера mongo адаптер использует асинхронный вызов для подключения к базе данных, что может привести к запуску инициализаторов до полного подключения адаптера.

Другие вопросы по тегам