Saltar al contenido

¿Cómo administro las conexiones MongoDB en una aplicación web Node.js?

Hola usuario de nuestra web, tenemos la respuesta a lo que buscabas, has scroll y la verás aquí.

Solución:

El confirmador principal de node-mongodb-native dice:

Abres do MongoClient.connect una vez cuando tu aplicación se inicia y reutilizas el objeto db. No es un grupo de conexiones singleton, cada .connect crea un nuevo grupo de conexiones.

Entonces, para responder a su pregunta directamente, reutilizar el objeto db que resulta de MongoClient.connect(). Esto le brinda agrupación y proporcionará un aumento de velocidad notable en comparación con las conexiones de apertura/cierre en cada acción de db.

Abra una nueva conexión cuando se inicie la aplicación Node.js y reutilice la existente db objeto de conexión:

/server.js

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import  MongoClient  from 'mongodb';
import config from './config';
import usersRestApi from './api/users';

const app = express();

app.use('/api/users', usersRestApi);

app.get('/', (req, res) => 
  res.send('Hello World');
);

// Create a MongoDB connection pool and start the application
// after the database connection is ready
MongoClient.connect(config.database.url,  promiseLibrary: Promise , (err, db) => 
  if (err) 
    logger.warn(`Failed to connect to the database. $err.stack`);
  
  app.locals.db = db;
  app.listen(config.port, () => 
    logger.info(`Node.js app is listening at http://localhost:$config.port`);
  );
);

/api/users.js

import  Router  from 'express';
import  ObjectID  from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => 
  try 
    const db = req.app.locals.db;
    const id = new ObjectID(req.params.id);
    const user = await db.collection('user').findOne( _id: id , 
      email: 1,
      firstName: 1,
      lastName: 1
    );

    if (user) 
      user.id = req.params.id;
      res.send(user);
     else 
      res.sendStatus(404);
    
   catch (err) 
    next(err);
  
);

export default router;

Fuente: Cómo abrir conexiones de bases de datos en una aplicación Node.js/Express

Aquí hay un código que administrará sus conexiones MongoDB.

var MongoClient = require('mongodb').MongoClient;
var url = require("../config.json")["MongoDBURL"]

var option = 
  db:
    numberOfRetries : 5
  ,
  server: 
    auto_reconnect: true,
    poolSize : 40,
    socketOptions: 
        connectTimeoutMS: 500
    
  ,
  replSet: ,
  mongos: 
;

function MongoPool()

var p_db;

function initPool(cb)
  MongoClient.connect(url, option, function(err, db) 
    if (err) throw err;

    p_db = db;
    if(cb && typeof(cb) == 'function')
        cb(p_db);
  );
  return MongoPool;


MongoPool.initPool = initPool;

function getInstance(cb)
  if(!p_db)
    initPool(cb)
  
  else
    if(cb && typeof(cb) == 'function')
      cb(p_db);
  

MongoPool.getInstance = getInstance;

module.exports = MongoPool;

Cuando inicie el servidor, llame initPool

require("mongo-pool").initPool();

Luego en cualquier otro módulo puedes hacer lo siguiente:

var MongoPool = require("mongo-pool");
MongoPool.getInstance(function (db)
    // Query your MongoDB database.
);

Esto se basa en la documentación de MongoDB. Mira esto.

Te mostramos las reseñas y valoraciones de los lectores

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *