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.