MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

node-mongodb-native:Como posso compartilhar o objeto db api do callback de conexão por meio do meu aplicativo


Db.open abre a conexão com mongodb e retorna uma referência a si mesmo. Veja aqui o código-fonte:https ://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/db.js#L245

Tudo o que você quer é adiar o início do seu aplicativo expresso ouvindo em sua porta e recebendo solicitações até que sua conexão com o mongodb seja estabelecida.

Então o que você poderia fazer é isso:
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);
});

O que eu não tenho certeza é se isso é uma boa ideia. Esta solução não permite que você recrie sua conexão se houver uma quebra de conexão ou se você reiniciar o processo mongodb. Portanto, embora o acima possa funcionar, pode ser uma ideia melhor criar um método que envolva a criação de uma conexão com o mongodb.