sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cuál es la mejor manera de manejar la conexión global de Mongodb en NodeJs?

Crear una Connection módulo singleton para administrar la conexión de la base de datos de aplicaciones.

MongoClient no proporciona un grupo de conexiones singleton, por lo que no desea llamar a MongoClient.connect() repetidamente en su aplicación. Una clase singleton para envolver el cliente mongo funciona para la mayoría de las aplicaciones que he 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 }

En todas partes que require('./Connection') , la Connection.open() estará disponible, al igual que Connection.db propiedad si se ha inicializado.

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