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