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

Como reutilizar corretamente a conexão com o Mongodb em aplicativos e módulos NodeJs


Você pode criar um mongoUtil.js módulo que tem funções para conectar ao mongo e retornar uma instância de banco de dados do mongo:
const MongoClient = require( 'mongodb' ).MongoClient;
const url = "mongodb://localhost:27017";

var _db;

module.exports = {

  connectToServer: function( callback ) {
    MongoClient.connect( url,  { useNewUrlParser: true }, function( err, client ) {
      _db  = client.db('test_db');
      return callback( err );
    } );
  },

  getDb: function() {
    return _db;
  }
};

Para usá-lo, você faria isso em seu app.js :
var mongoUtil = require( 'mongoUtil' );

mongoUtil.connectToServer( function( err, client ) {
  if (err) console.log(err);
  // start the rest of your app here
} );

E então, quando você precisar acessar o mongo em outro lugar, como em outro .js arquivo, você pode fazer isso:
var mongoUtil = require( 'mongoUtil' );
var db = mongoUtil.getDb();

db.collection( 'users' ).find();

A razão pela qual isso funciona é que no nó, quando os módulos são require 'd, eles só são carregados/originados uma vez, então você só vai acabar com uma instância de _db e mongoUtil.getDb() sempre retornará a mesma instância.

Nota, código não testado.