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

Cómo reutilizar correctamente la conexión a Mongodb en la aplicación y los módulos de NodeJs

Puede crear un mongoUtil.js módulo que tiene funciones tanto para conectarse a mongo como para devolver una instancia de mongo db:

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 usarlo, haría esto en su app.js :

var mongoUtil = require( 'mongoUtil' );

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

Y luego, cuando necesite acceder a mongo en otro lugar, como en otro .js archivo, puede hacer esto:

var mongoUtil = require( 'mongoUtil' );
var db = mongoUtil.getDb();

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

La razón por la que esto funciona es que en el nodo, cuando los módulos son require 'd, solo se cargan / obtienen una vez, por lo que solo terminará con una instancia de _db y mongoUtil.getDb() siempre devolverá la misma instancia.

Nota, código no probado.