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