tutorial nodejs node node.js mongodb object reusability pool

nodejs - Node.js y MongoDB, reutilizando el objeto DB



graphql nodejs mysql (2)

Desde su último fragmento de código, parece que está utilizando Express o un marco similar. Puede usar express-mongo-db para obtener conexión dentro del objeto req . Este middleware almacenará en caché la conexión y la compartirá con otras solicitudes entrantes:

app.use(require(''express-mongo-db'')(require(''mongodb''), { db: ''test'' })) app.post(''/employee'', function(req, res){ // req.db.collection(''names''),insert(req.name) // Put req.name in database }); app.post(''/car'', function(req, res){ // req.db.collection(''names'').insert(req.name) // Put req.car in database });

Soy nuevo tanto en Node.js como en MongoDB, pero he logrado juntar algunas partes de SO y la documentación para mongo.

La documentación de Mongo da el ejemplo:

// Retrieve var MongoClient = require(''mongodb'').MongoClient; // Connect to the db MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) { if(!err) { console.log("We are connected"); } });

Lo cual se ve bien si solo necesito usar el DB en una función en un lugar. Buscar y leer en SO me ha demostrado que no debería abrir una nueva conexión cada vez, sino que más bien usar un grupo y reutilizar el objeto de la base de datos que obtengo la primera vez. Esta respuesta es abundante en SO, pero no estoy seguro de cómo obtener el objeto DB en primer lugar y luego cómo reutilizarlo.

Digamos que tengo el código Node.js anterior en mi App.js, y luego tengo diferentes rutas que necesitan ejecutar diferentes operaciones en la base de datos como:

app.post(''/employee'', function(req, res){ //Put req.name in database }); app.post(''/car'', function(req, res){ //Put req.car in database });

¿Cómo me gustaría poner estos dos fragmentos juntos en algo útil?

Encontré una pregunta similar en Node.js reutiliza la referencia de MongoDB , pero por el aspecto de esta ( http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html ) parece que debería usar MongoClient en lugar de db (). Y tampoco estoy seguro de que resuelva mi problema ...


Siempre puede escribir un módulo que inicialice las conexiones de su base de datos y las haga accesibles a través de su programa. Por ejemplo:

mongo.js

var mongodb = require(''mongodb''); module.exports.init = function (callback) { var server = new mongodb.Server("127.0.0.1", 27017, {}); new mongodb.Db(''test'', server, {w: 1}).open(function (error, client) { //export the client and maybe some collections as a shortcut module.exports.client = client; module.exports.myCollection = new mongodb.Collection(client, ''myCollection''); callback(error); }); };

app.js

var mongo = require(''./mongo.js''); //setup express... //initialize the db connection mongo.init(function (error) { if (error) throw error; app.listen(80); //database is initialized, ready to listen for connections });

randomFile.js

var mongo = require(''./mongo.js''); module.exports.doInsert = function () { //use the collection object exported by mongo.js mongo.myCollection.insert({test: ''obj''}, {safe:true}, function(err, objects) { if (err) console.warn(err.message); }); };

Sé que la gente habla acerca de la agrupación, pero cuando hice una evaluación comparativa de las conexiones mongo de agrupación frente a una única conexión para todas las solicitudes, la única conexión realmente funcionó mejor. Por supuesto, esto fue hace aproximadamente un año, pero dudo que el concepto básico haya cambiado. Todas las solicitudes son asíncronas, por lo que no son necesarias múltiples conexiones para realizar solicitudes simultáneas.

En cuanto a MongoClient, creo que esa es la nueva sintaxis que son alentadoras. De cualquier manera, es esencialmente un objeto cliente que desea mantener y hacer accesible sin importar qué estilo use.