Comment réutiliser une connexion mongodb via Promise

Je veux réutiliser la connexion MongoDB. Je suis conscient de Comment réutiliser la connexion mongodb dans le fichier node.js?

Actuellement, je dois me connecter à la firebase database pour chaque requête, ce qui la ralentit. C’est mon code

"use ssortingct" var app = require('./utils/express')(); var mongodb = require('mongodb'); var MongoClient = mongodb.MongoClient; //Actually I 'am connecting to MongoLab var url = 'mongodb://localhost/my-mongo'; app.set('port', (process.env.PORT || 5000)); app.listen(app.get('port'), function () { console.log('ParkMe app is running on port', app.get('port')); }); app.get('/location/create', function(req,res,next){ MongoClient.connect(url).then(function(db) { return db.collection('parkme_parkingLots').find({}).toArray().then(function (docs) { return docs; }); }); }); 

Je veux faire quelque chose comme:

 "use ssortingct" var app = require('./utils/express')(); var mongodb = require('mongodb'); var MongoClient = mongodb.MongoClient; var url = 'mongodb://nidhind:[email protected]:51635/my-mongo'; var db = MongoClient.connect(url).then(function(db) { return db; }); app.set('port', (process.env.PORT || 5000)); app.listen(app.get('port'), function () { console.log('ParkMe app is running on port', app.get('port')); }); app.get('/location/create', function(req,res,next){ db.collection('parkme_parkingLots').find({}).toArray().then(function (docs) { return docs; }); }); 

Vous y êtes presque, il ne rest que quelques modifications à apporter à votre code:

 "use ssortingct" var app = require('./utils/express')(); var mongodb = require('mongodb'); var MongoClient = mongodb.MongoClient; var url = 'mongodb://nidhind:[email protected]:51635/my-mongo'; // no need to call then() yet var connection = MongoClient.connect(url); app.set('port', (process.env.PORT || 5000)); app.listen(app.get('port'), function() { console.log('ParkMe app is running on port', app.get('port')); }); app.get('/location/create', function(req, res, next) { // the connection is opened once, use it at will connection.then(function(db) { db.collection('parkme_parkingLots').find({}).toArray().then(function(docs) { return docs; }); }); }); 

Voici comment je le fais avec la syntaxe contemporaine.

Je mets quelques commentaires dans le code.

./db/mongodb.js

  const MongoClient = require('mongodb').MongoClient const uri = 'mongodb://user:password@localhost:27017/dbName' let _db const connectDB = async (callback) => { try { MongoClient.connect(uri, (err, db) => { _db = db return callback(err) }) } catch (e) { throw e } } const getDB = () => _db const disconnectDB = () => _db.close() module.exports = { connectDB, getDB, disconnectDB } 

./index.js

  // Load MongoDB utils const MongoDB = require('./db/mongodb') // Load queries & mutations const Users = require('./users') // Improve debugging process.on('unhandledRejection', (reason, p) => { console.log('Unhandled Rejection at:', p, 'reason:', reason) }) const seedUser = { name: 'Bob Alice', email: '[email protected]', bonusSetting: true } // Connect to MongoDB and put server instantiation code inside // because we start the connection first MongoDB.connectDB(async (err) => { if (err) throw err // Load db & collections const db = MongoDB.getDB() const users = db.collection('users') try { // Run some sample operations // and pass users collection into models const newUser = await Users.createUser(users, seedUser) const listUsers = await Users.getUsers(users) const findUser = await Users.findUserById(users, newUser._id) console.log('CREATE USER') console.log(newUser) console.log('GET ALL USERS') console.log(listUsers) console.log('FIND USER') console.log(findUser) } catch (e) { throw e } const desired = true if (desired) { // Use disconnectDB for clean driver disconnect MongoDB.disconnectDB() process.exit(0) } // Server code anywhere above here inside connectDB() }) 

./users/index.js

  const ObjectID = require('mongodb').ObjectID // Notice how the users collection is passed into the models const createUser = async (users, user) => { try { const results = await users.insertOne(user) return results.ops[0] } catch (error) { throw error } } const getUsers = async (users) => { try { const results = await users.find().toArray() return results } catch (error) { throw error } } const findUserById = async (users, id) => { try { if (!ObjectID.isValid(id)) throw 'Invalid MongoDB ID.' const results = await users.findOne(ObjectID(id)) return results } catch (error) { throw error } } // Export garbage as methods on the User object module.exports = { createUser, getUsers, findUserById }