MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Qual è il modo migliore per gestire la connessione globale di Mongodb in NodeJs

Crea una Connection modulo singleton per gestire la connessione al database delle app.

MongoClient non fornisce un pool di connessioni singleton, quindi non vuoi chiamare MongoClient.connect() ripetutamente nella tua app. Una classe singleton per avvolgere il client mongo funziona per la maggior parte delle app che ho visto.

const MongoClient = require('mongodb').MongoClient

class Connection {

    static async open() {
        if (this.db) return this.db
        this.db = await MongoClient.connect(this.url, this.options)
        return this.db
    }

}

Connection.db = null
Connection.url = 'mongodb://127.0.0.1:27017/test_db'
Connection.options = {
    bufferMaxEntries:   0,
    reconnectTries:     5000,
    useNewUrlParser:    true,
    useUnifiedTopology: true,
}

module.exports = { Connection }

Ovunque require('./Connection') , il Connection.open() sarà disponibile, così come Connection.db proprietà se è stata inizializzata.

const router = require('express').Router()
const { Connection } = require('../lib/Connection.js')

// This should go in the app/server setup, and waited for.
Connection.open()

router.get('/files', async (req, res) => {
   try {
     const files = await Connection.db.collection('files').find({})
     res.json({ files })
   }
   catch (error) {
     res.status(500).json({ error })
   }
})

module.exports = router