conexão única de reutilização nativa de nodejs mongodb

require('dotenv').config();
const { MongoClient } = require('mongodb');
const config = require('../../config/index');

const username = encodeURIComponent(config.mongo_db1.user);
const password = encodeURIComponent(config.mongo_db1.pass);
const dbHost = config.mongo_db1.host;
const authMechanism = 'DEFAULT';
const qString = `retryWrites=true&w=majority&authMechanism=${authMechanism}`;

const uri = `mongodb+srv://${username}:${password}@${dbHost}/?${qString}`;

const mongoOptions = {
  poolSize: 100,
  wtimeout: 2500,
  useNewUrlParser: true,
  useUnifiedTopology: true,
};

const client = new MongoClient(uri, mongoOptions);

let _db;

client.on('serverClosed', (event) => {
  // eslint-disable-next-line no-console
  console.log('received serverClosed');
  // eslint-disable-next-line no-console
  console.log(JSON.stringify(event, null, 2));

  // should i call mongoDBConnection() here if connection lost while app running?
});

const mongoDBConnection = async (app) => {
  try {
    if (client.isConnected()) {
      _db = client.db(config.mongo_db1.dbName);
      return client.db(config.mongo_db1.dbName);
    }

    await client.connect();
    if (app) app.use(passport.initialize());
    _db = client.db(config.mongo_db1.dbName);
    return client.db(config.mongo_db1.dbName);
  } catch (error) {
    return Promise.reject(error);
  }
};

const dbObj = () => _db;

module.exports = {
  mongoDBConnection,
  dbObj,
};
Calm Cottonmouth