Creé una conexión nativa mongodb y la guardé y luego usé findOne para consultar un documento.
const Promise = require("bluebird"); const MongoClient = require('mongodb').MongoClient; let mongoDB = undefined; const getCollection = (collName) => { if (mongoDB) { return Promise.resolve(mongoDB.collection(collName)); } else { return MongoClient.connect(EXT_CONFS.MONGODB_URL) .then(db => { mongoDB = db; return Promise.resolve(mongoDB.collection(collName)); }).catch(e => { console.error('Error in MongoDb connection'); }); } }; const findOne = (collName, filter, options) => { return getCollection(collName) .then(collection => { return collection.findOne(filter, options); }) .then(doc => { return Promise.resolve(doc); }).catch(e => { console.error(e); return Promise.reject(e); }); };Ahora todo esto funciona bien, pero si Mongo se cierra o falla después de que el cliente de base de datos se almacena en caché, no hay forma de manejar el error. El error nunca va a ningún controlador de captura:
console.error('Error en la conexión MongoDb');
o
consola.error(e);
Incluso probé eventos:
mongoDB.on('connecting', function () { console.log('connecting'); }); mongoDB.on('timeout', function (error) { console.log('timeout!'); }); mongoDB.on('close', function (error) { console.log('close!'); }); mongoDB.on('error', function (error) { console.error('Error in MongoDb connection: ' + error); }); mongoDB.on('connected', function () { console.log('connected!'); }); mongoDB.on('connection', function () { console.log('connected!'); }); mongoDB.on('connect', function () { console.log('connected!'); }); mongoDB.once('open', function () { console.log('connection open'); }); mongoDB.on('reconnected', function () { console.log('reconnected'); }); mongoDB.on('disconnected', function () { console.log('disconnected'); });pero sin éxito todavía. Usando NodeJS 4.5.0, controlador MongoDB-Native 2.2.24
Deberías hacer algo como console.error('Failed to connect to mongodb ',e); usted no está dando salida al error.
Además, algunos eventos proporcionan un parámetro adicional y usted también los está generando. En caso de que no se pueda conectar a un servidor mongodb, su aplicación solo debe notificarle que no es el mejor enfoque para manejar el inicio/reinicio del servidor mongodb desde su aplicación, use demonios como systemd u otro proceso de monitoreo.
Algunos eventos están allí simplemente para notificar a la aplicación que se perdió la conexión o que se intentó una reconexión, depende de usted manejar lo que se hará cuando se emitan esos eventos.
Por ejemplo, puede intentar verificar el estado de mongodb cuando se emite un evento de desconexión y recrear un objeto de conexión.
Puede envolver la declaración de conexión en un bloque try-catch.