sql >> Base de Datos >  >> NoSQL >> MongoDB

node-mongodb-native:¿Cómo puedo compartir el objeto db api de la devolución de llamada de conexión a través de mi aplicación?

Db.open abre la conexión a mongodb y devuelve una referencia a sí mismo. Vea aquí el código fuente:https ://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/db.js#L245

Todo lo que desea es retrasar el inicio de su aplicación express escuchando en su puerto y recibiendo solicitudes hasta que se haya establecido su conexión a mongodb.

Entonces, lo que podrías hacer es esto:

var mongodb = require("mongodb"),
    express = require("express"),
    mongoServer = new mongodb.Server('localhost', 27017),
    dbConnector = new mongodb.Db('example', mongoServer),
    db;

var app = new express();

app.get('/products', function(req, res, next) {
  db.collection('products', function(err, collection) {
    if (err) next(new Error(err));
    collection.find({}, function(err, products) {
      res.send(products);
    });
  });
});

db_connector.open(function(err, opendb) {
  if (err) throw new Error(err);
  db = opendb;
  app.listen(3000);
});

De lo que no estoy seguro es si esto es una buena idea. Esta solución no le permite recrear su conexión si ha habido una interrupción de la conexión o ha reiniciado su proceso mongodb. Entonces, si bien lo anterior podría funcionar, podría ser una mejor idea crear un método que envuelva la creación de una conexión a mongodb.