Cara menggunakan kembali koneksi ke Mongodb dengan benar di seluruh aplikasi dan modul NodeJs

124

Saya telah membaca dan membaca dan masih bingung tentang apa cara terbaik untuk berbagi koneksi database (MongoDb) yang sama di seluruh aplikasi NodeJs. Seperti yang saya pahami, koneksi harus dibuka saat aplikasi dimulai dan digunakan kembali antar modul. Ide saya saat ini tentang cara terbaik adalah server.js(file utama tempat semuanya dimulai) terhubung ke database dan membuat variabel objek yang diteruskan ke modul. Setelah terhubung, variabel ini akan digunakan oleh kode modul seperlunya dan koneksi ini tetap terbuka. Misalnya:

    var MongoClient = require('mongodb').MongoClient;
    var mongo = {}; // this is passed to modules and code

    MongoClient.connect("mongodb://localhost:27017/marankings", function(err, db) {
        if (!err) {
            console.log("We are connected");

            // these tables will be passed to modules as part of mongo object
            mongo.dbUsers = db.collection("users");
            mongo.dbDisciplines = db.collection("disciplines");

            console.log("aaa " + users.getAll()); // displays object and this can be used from inside modules

        } else
            console.log(err);
    });

    var users = new(require("./models/user"))(app, mongo);
    console.log("bbb " + users.getAll()); // not connected at the very first time so displays undefined

kemudian modul lain models/userterlihat seperti itu:

Users = function(app, mongo) {

Users.prototype.addUser = function() {
    console.log("add user");
}

Users.prototype.getAll = function() {

    return "all users " + mongo.dbUsers;

    }
}

module.exports = Users;

Sekarang saya memiliki perasaan buruk bahwa ini salah, jadi apakah ada masalah yang jelas dengan pendekatan ini dan jika demikian, bagaimana cara membuatnya lebih baik?

spirytus
sumber
Jenis pertanyaan yang sama yang saya ajukan beberapa hari yang lalu. stackoverflow.com/questions/24547357/…
Salvador Dali
Periksa pengemudi mongoist . Itu " dibangun dengan async / await dalam pikiran " dan memungkinkan koneksi ekspor malas seperti module.exports = mongoist(connectionString);. (Baca tentang connectionStringdi Manual MongoDB.)
Alexandr Nil

Jawaban:

150

Anda dapat membuat mongoUtil.jsmodul yang memiliki fungsi untuk menghubungkan ke mongo dan mengembalikan instance mongo db:

const MongoClient = require( 'mongodb' ).MongoClient;
const url = "mongodb://localhost:27017";

var _db;

module.exports = {

  connectToServer: function( callback ) {
    MongoClient.connect( url,  { useNewUrlParser: true }, function( err, client ) {
      _db  = client.db('test_db');
      return callback( err );
    } );
  },

  getDb: function() {
    return _db;
  }
};

Untuk menggunakannya, Anda akan melakukan ini di app.js:

var mongoUtil = require( 'mongoUtil' );

mongoUtil.connectToServer( function( err, client ) {
  if (err) console.log(err);
  // start the rest of your app here
} );

Dan kemudian, ketika Anda membutuhkan akses ke mongo di tempat lain, seperti di .jsfile lain , Anda dapat melakukan ini:

var mongoUtil = require( 'mongoUtil' );
var db = mongoUtil.getDb();

db.collection( 'users' ).find();

Alasan ini berfungsi adalah bahwa dalam node, ketika modul-modul itu require'd, mereka hanya dimuat / bersumber sekali sehingga Anda hanya akan berakhir dengan satu contoh _dbdan mongoUtil.getDb()akan selalu mengembalikan contoh yang sama.

Catatan, kode tidak diuji.

go-oleg
sumber
6
Contoh yang bagus! Namun, saya punya pertanyaan. Bagaimana cara kerjanya saat menjalankan aplikasi Anda dengan beberapa cluster? Apakah itu akan memutar contoh koneksi lain atau hanya menggunakan koneksi yang ada dari sumber?
Farhan Ahmad
19
Bagaimana Anda menangani kasus ketika koneksi mongo mati di antaranya? Semua panggilan ke getDb () akan gagal dalam skenario itu sampai aplikasi node di-restart.
Ayan
4
Saya mencoba kode ini tetapi saya mendapatkan null ketika melakukan mongoUtil.getDb (), saya tidak tahu mengapa begitu.
Keming
3
@KemingZeng - Anda perlu memastikan bahwa semua modul yang menggunakan mongoUtil diimpor app.jsdalam fungsi callbackconnectToServer . Jika Anda requiredalam app.jssebelum _dbditetapkan, maka Anda akan mendapatkan error terdefinisi dalam modul lain.
Mike R
2
Pada mongoDB versi 4 seharusnya var database = mongoUtil.getDb(); database.db().collection( 'users' ) .
Julian Veerkamp
26

Ada banyak cara yang dapat mengubah ini untuk menerima objek konfigurasi di beberapa tempat, tetapi secara keseluruhan ini mirip dengan cara Anda menyusun kode, meskipun dengan sintaks JS yang lebih modern. Dapat dengan mudah ditulis ulang menjadi prototipe dan callback, jika itu kebutuhan Anda.

mongo.js

const { MongoClient } = require('mongodb');
const config = require('./config');
const Users = require('./Users');
const conf = config.get('mongodb');

class MongoBot {
  constructor() {
    const url = `mongodb://${conf.hosts.join(',')}`;

    this.client = new MongoClient(url, conf.opts);
  }
  async init() {
    await this.client.connect();
    console.log('connected');

    this.db = this.client.db(conf.db);
    this.Users = new Users(this.db);
  }
}

module.exports = new MongoBot();

Users.js

class User {
  constructor(db) {
    this.collection = db.collection('users');
  }
  async addUser(user) {
    const newUser = await this.collection.insertOne(user);
    return newUser;
  }
}
module.exports = User;

app.js

const mongo = require('./mongo');

async function start() {
  // other app startup stuff...
  await mongo.init();
  // other app startup stuff...
}
start();

someFile.js

const { Users } = require('./mongo');

async function someFunction(userInfo) {
  const user = await Users.addUser(userInfo);
  return user;
}
EddieDean
sumber
Ini adalah pendekatan paling rapi yang pernah saya temui
KalenGi
Saya menyadari jawaban ini hampir berumur satu tahun dan saya tidak benar-benar mengharapkan lebih banyak informasi, tetapi ini sepertinya pendekatan yang paling ingin saya gunakan namun saya tidak beruntung menarik objek Pengguna yang dirusak dari file mongo. Saya memiliki file yang sangat mirip dengan someFile.js Anda, tetapi baris 4 tempat Anda memanggil Users.addUser selalu meledak untuk saya - mengatakan bahwa Pengguna tidak ditentukan. Apakah ada bagian yang jelas saya lewatkan?
Rob E.
Saya akhirnya membuat pertanyaan baru karena ini sangat mengganggu saya.
Rob E.
ini seharusnya tidak bekerja secara teknis. Membutuhkan cache objek pada panggilan pertama. Dalam kasus ini, ini hanya akan menyimpan objek yang dikembalikan oleh konstruktor. Memanggil 'init' nanti tidak berpengaruh pada apa yang akan dikembalikan. Jadi const ini {Users} = require ('./ mongo') harus gagal karena tidak akan ada properti 'User' pada hasil yang di-cache.
beNerd
Requirement.cache menyimpan referensi ke objek, yang dibagikan di antara semua file yang memerlukan objek itu. Objek yang dapat dimutasi oleh tindakan dari bagian lain dari program (atau bahkan dirinya sendiri jika Anda menggunakan pengatur waktu). Anda dapat mengujinya sendiri dengan cepat, tetapi saya menggunakan pena cepat untuk mendemonstrasikan: codesandbox.io/s/awesome-water-cexno
EddieDean
19

Inilah cara saya melakukannya dengan sintaksis kontemporer, berdasarkan contoh go-oleg. Punyaku teruji dan berfungsi.

Saya memberi beberapa komentar di kode.

./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 (e) {
         throw e
     }
 }

 const getUsers = async (users) => {
     try {
         const results = await users.find().toArray()
         return results
     } catch (e) {
         throw e
     }
 }

 const findUserById = async (users, id) => {
     try {
         if (!ObjectID.isValid(id)) throw 'Invalid MongoDB ID.'
         const results = await users.findOne(ObjectID(id))
         return results
     } catch (e) {
         throw e
     }
 }

 // Export garbage as methods on the Users object
 module.exports = { createUser, getUsers, findUserById }
agm1984
sumber
apakah coba menangkap dalam cuplikan pertama Anda diperlukan? fungsi koneksi adalah fungsi async. Kesalahan sudah diketahui menggunakan callback gaya node.
Shanks
1
Itu adalah pertanyaan yang sangat saya sukai. Saya tidak yakin tanpa mempelajarinya lebih dekat di habitat Anda menempatkan kode. Akan ada sejumlah jalur terbatas yang dapat diambil selama eksekusi kode. Saya menambahkannya sebagian besar untuk menunjukkan bahwa Anda dapat meletakkan penangan khusus di sana dan karena saya secara default menyertakan coba / tangkap dalam fungsi async. Ini hanyalah titik kail. Pertanyaan yang bagus. Saya akan memperbarui jika Anda menemukan catatan tambahan.
agm1984
setiap kali saya memanggil getDB () itu akan membuat koneksi baru, bukan?
Vinay Pandya
18

Jika Anda menggunakan Express, maka Anda dapat menggunakan modul express-mongo-db yang memungkinkan Anda mendapatkan koneksi db di objek permintaan.

Install

npm install --save express-mongo-db

server.js

var app = require('express')();

var expressMongoDb = require('express-mongo-db');
app.use(expressMongoDb('mongodb://localhost/test'));

routes / users.js

app.get('/', function (req, res, next) {
    req.db // => Db object
});
Mukesh Chapagain
sumber
8

go-oleg pada dasarnya benar, tetapi saat ini Anda (mungkin) tidak ingin menggunakan "mongodb" itu sendiri, melainkan menggunakan beberapa kerangka kerja, yang akan melakukan banyak "pekerjaan kotor" untuk Anda.

Misalnya, luwak adalah salah satu yang paling umum. Inilah yang kami miliki di server.jsfile awal kami :

const mongoose = require('mongoose');
const options = {server: {socketOptions: {keepAlive: 1}}};
mongoose.connect(config.db, options);

Ini semua yang dibutuhkan untuk mengaturnya. Sekarang gunakan ini di manapun dalam kode Anda

const mongoose = require('mongoose');

Dan Anda mendapatkan contoh yang Anda siapkan mongoose.connect

libik
sumber
1
luwak adalah ORM. Baca ini untuk mengetahui tentang kemungkinan jebakan untuk hal yang sama. Tidak diragukan lagi ORM sangat bagus jika digunakan untuk proses pengembangan dan pembelajaran tetapi tidak untuk produksi. Ingatlah ini
Saras Arya
1
Mongoose juga membutuhkan skema. Saya menggunakan paket MongoDB sebagai bagian dari persistensi poliglot dengan Neo4j, jadi menyenangkan untuk mendefinisikan properti dokumen sesuai kebutuhan.
agm1984
7

Inisialisasi koneksi sebagai janji:

const MongoClient = require('mongodb').MongoClient
const uri = 'mongodb://...'
const client = new MongoClient(uri)
const connection = client.connect() // initialized connection

Dan kemudian panggil koneksi setiap kali Anda ingin Anda melakukan tindakan pada database:

    // if I want to insert into the database...
    const connect = connection
    connect.then(() => {
        const doc = { id: 3 }
        const db = client.db('database_name')
        const coll = db.collection('collection_name')
        coll.insertOne(doc, (err, result) => {
            if(err) throw err
        })
    })
Henry Bothin
sumber
7

Solusi teruji berdasarkan jawaban yang diterima:

mongodbutil.js:

var MongoClient = require( 'mongodb' ).MongoClient;
var _db;
module.exports = {
  connectToServer: function( callback ) {
    MongoClient.connect( "<connection string>", function( err, client ) {
      _db = client.db("<collection name>");
      return callback( err );
    } );
  },
  getDb: function() {
    return _db;
  }
};

app.js:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

var mongodbutil = require( './mongodbutil' );
mongodbutil.connectToServer( function( err ) {
  //app goes online once this callback occurs
  var indexRouter = require('./routes/index');
  var usersRouter = require('./routes/users');
  var companiesRouter = require('./routes/companies');
  var activitiesRouter = require('./routes/activities');
  var registerRouter = require('./routes/register');  
  app.use('/', indexRouter);
  app.use('/users', usersRouter);
  app.use('/companies', companiesRouter);
  app.use('/activities', activitiesRouter);
  app.use('/register', registerRouter);  
  // catch 404 and forward to error handler
  app.use(function(req, res, next) {
    next(createError(404));
  });
  // error handler
  app.use(function(err, req, res, next) {
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};
    res.status(err.status || 500);
    res.render('error');
  });
  //end of calback
});

module.exports = app;

activities.js - rute:

var express = require('express');
var router = express.Router();
var mongodbutil = require( '../mongodbutil' );
var db = mongodbutil.getDb();

router.get('/', (req, res, next) => {  
    db.collection('activities').find().toArray((err, results) => {
        if (err) return console.log(err)
            res.render('activities', {activities: results, title: "Activities"})
    });
});

router.post('/', (req, res) => {
  db.collection('activities').save(req.body, (err, result) => {
    if (err) return console.log(err)
    res.redirect('/activities')
  })
});

module.exports = router;
steve
sumber
Jawaban ini lengkap dan fungsional.
Ahmad Sharif
7

Inilah pengaturan saya pada tahun 2020:

./utils/database.js

const { MongoClient } = require('mongodb');

class Mongo {
    constructor () {
        this.client = new MongoClient("mongodb://127.0.0.1:27017/my-app", {
            useNewUrlParser: true,
            useUnifiedTopology: true
        });
    }

    async main () {
        await this.client.connect();
        console.log('Connected to MongoDB');

        this.db = this.client.db();
    }
}

module.exports = new Mongo();

/app.js

const mongo = require('./utils/database');
const express = require('express');

const app = express();

const boot = async () => {
    await mongo.main();
    app.listen(3000);
};

boot();
Aditya Hajare
sumber
3

kita dapat membuat file dbconnection seperti dbconnection.js

const MongoClient = require('mongodb').MongoClient
const mongo_url = process.env.MONGO_URL;

    module.exports = {
        connect: async function(callback) {
            var connection;
            await new Promise((resolve, reject) => {
                MongoClient.connect(mongo_url, {
                    useNewUrlParser: true
                }, (err, database) => {
                    if (err)
                        reject();
                    else {
                        connection = database;
                        resolve();
                    }
                });
            });
            return connection;
        }

    };

lalu gunakan file ini di aplikasi Anda seperti

var connection = require('../dbconnection');

dan kemudian gunakan seperti ini di dalam fungsi asinkron Anda

db  = await connection.connect();

semoga ini berhasil

gaurav
sumber
2

Saya agak terlambat untuk ini, tetapi saya akan menambahkan solusi saya juga. Ini adalah pendekatan yang jauh lebih noob dibandingkan dengan jawaban di sini.

Bagaimanapun jika Anda menggunakan MongoDB versi 4.0 dan Node.js 3.0 (atau versi yang lebih tinggi) Anda dapat menggunakan isConnected()fungsi dari MongoClient.

const MongoClient = require('mongodb').MongoClient;
const uri = "<your connection url>";
const client = new MongoClient(uri, { useNewUrlParser: true });

if (client.isConnected()) {
  execute();
} else {
  client.connect().then(function () {
    execute();
  });
}

function execute() {
    // Do anything here
    // Ex: client.db("mydb").collection("mycol");
}

Ini bekerja dengan baik untuk saya. Semoga membantu.

Roshana Pitigala
sumber
2

Saya terlambat ke pesta, tapi semoga jawaban ini akan membantu seseorang, ini adalah kode fungsional:

db.js

const MongoClient = require("mongodb").MongoClient
const urlMongo = "mongodb://localhost:27017"

var db;

function connectToServer( callback ) {
    MongoClient.connect(urlMongo,  { useUnifiedTopology: true , useNewUrlParser: true }, function( err, client ) {
        db  = client.db('auth');
        return callback( err );
    })
}

function getDb() {
    return db
}

module.exports = {connectToServer, getDb}

Kami mengekspor satu fungsi untuk terhubung ke mongo dan fungsi lainnya untuk mendapatkan de instanceof koneksi.

app.js

const express = require('express')
const app = express()

const mongo = require('./db.js');

mongo.connectToServer( function( err) {
  if (err) console.log(err);
  const auth = require('./modulos')

  app.post('/login', (req, res) => { auth.login(req, res)})
  app.listen(3000, function () { console.log('Corriendo en puerto 3000')})

});

Kita harus melakukan keperluan modul auth setelah kita memulai koneksi, jika tidak fungsi getDb akan kembali tidak terdefinisi.

module.js

const db = require('../db.js').getDb()
const usuariosCollection = db.collection('usuarios')

function login(req, res){
    usuariosCollection.find({ 'username': 'Fran' }).toArray(function (err, doc) {
        ...
    })
}
Knemay
sumber
2

Karena ini ditandai dengan Express, saya pikir saya akan menyebutkan bahwa Express memiliki fitur bawaan untuk berbagi data antar rute. Ada sebuah objek bernama app.locals. Kami dapat melampirkan properti ke sana dan mengaksesnya dari dalam rute kami. Anda cukup membuat contoh koneksi mongo Anda di file app.js Anda.

var app = express();

MongoClient.connect('mongodb://localhost:27017/')
.then(client =>{
  const db = client.db('your-db');
  const collection = db.collection('your-collection');
  app.locals.collection = collection;
});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // view engine setup
app.set('views', path.join(__dirname, 'views'));

Koneksi database ini sekarang dapat diakses dalam rute Anda seperti di bawah ini tanpa perlu membuat dan memerlukan modul tambahan.

app.get('/', (req, res) => {
  const collection = req.app.locals.collection;
  collection.find({}).toArray()
  .then(response => res.status(200).json(response))
  .catch(error => console.error(error));
});

Metode ini memastikan bahwa Anda memiliki koneksi database yang terbuka selama aplikasi Anda kecuali Anda memilih untuk menutupnya kapan saja. Ini mudah diakses dengan req.app.locals.your-collectiondan tidak memerlukan modul tambahan.

Hoppo
sumber
Saya merasa itu pendekatan terbersih. Apakah kami memiliki kemungkinan kerugian untuk pendekatan ini? Saya menggunakannya dan terlihat cukup bagus bagi saya, akan membagikan pembelajaran saya.
Priya Ranjan Singh
@PriyaRanjanSingh Sejujurnya, saya tidak tahu ada kekurangan, tapi saya sama sekali bukan ahli dalam hal ini. Saya menemukan metode ini setelah meneliti karena saya menemukan metode lain secara tidak wajar dan saya mencari kode yang lebih bersih dan lebih mudah dimengerti untuk keuntungan saya sendiri. Semoga seseorang yang lebih berpengetahuan dari saya akan dapat menyoroti jika ada kekurangan. Saya telah menggunakan metode ini tanpa masalah untuk sementara waktu sekarang dan sepertinya berfungsi dengan baik.
Hoppo
1

Jika Anda memilih untuk menggunakan luwak dalam aplikasi Anda, edit file app.js Anda dengan cuplikan berikut

app.js

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/Your_Data_Base_Name', {useNewUrlParser:true})
  .then((res) => {
    console.log(' ########### Connected to mongDB ###########');
  })
  .catch((err) => {
    console.log('Error in connecting to mongoDb' + err);
  });`

Langkah Berikutnya: Tentukan Model untuk aplikasi Anda yang memerlukannya dan lakukan operasi CRUD secara langsung misalnya

blogSchema.js

 const mongoose = require('mongoose');
 const Schema = mongoose.Schema;
 const blogSchema = new Schema({
     _id : mongoose.Schema.Types.ObjectId,
     title : {
        type : 'String',
        unique : true,
        required : true       
    },
    description : String,
        comments : [{type : mongoose.Schema.Types.ObjectId, ref: 'Comment'}]
 });
 module.exports = mongoose.model('Blog', blogSchema);

Gunakan createBlog.js

const Blog = require('../models/blogSchema');
exports.createBlog = (req, res, next) => {
const blog = new Blog({
  _id : new mongoose.Types.ObjectId,
  title : req.body.title,
  description : req.body.description,
});
blog.save((err, blog) => {
  if(err){
    console.log('Server Error save fun failed');
    res.status(500).json({
      msg : "Error occured on server side",
      err : err
    })
  }else{
    //do something....
  }

Anda tidak perlu selalu terhubung ke mogoDB ....

Naresh_Varma
sumber
1
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/';
var Pro1;

module.exports = {
    DBConnection:async function()
    {
        Pro1 = new Promise(async function(resolve,reject){
            MongoClient.connect(url, { useNewUrlParser: true },function(err, db) {
                if (err) throw err;
                resolve(db);
            });        
        });
    },
    getDB:async function(Blockchain , Context)
    {
        bc = Blockchain;
        contx = Context;
        Pro1.then(function(_db)
        {
            var dbo = _db.db('dbname');
            dbo.collection('collectionname').find().limit(1).skip(0).toArray(function(err,result) {
                if (err) throw err;
                console.log(result);
            });
        });
    },
    closeDB:async function()
    {
        Pro1.then(function(_db){
            _db.close();
        });
    }
};
Tejas Naik
sumber
1
Bisakah Anda menambahkan deskripsi singkat?
RtmY
1
const express = require('express')
const server = express()
const mongoClient = require('./MongoDB.js').client
const port = 3000
;(async () => {
    await mongoClient.connect()
    server.listen(port, () => console.log(`Server is listening on port ${port}!`))
})().catch(console.error)
Xulong Zhang
sumber
0

Saya menemukan ini bekerja dengan baik :)

mongoUtil.ts

import { MongoClient } from 'mongodb';
const uri =
  'MONGOSTRING';

let connPoolPromise: any = null;

const mongoPoolPromise = () => {
  if (connPoolPromise) return connPoolPromise;

  connPoolPromise = new Promise((resolve, reject) => {
    const conn = new MongoClient(uri, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    });

    if (conn.isConnected()) {
      return resolve(conn);
    } else {
      conn
        .connect()
        .then(() => {
          return resolve(conn.db('DATABASENAME'));
        })
        .catch(err => {
          console.log(err);
          reject(err);
        });
    }
  });

  return connPoolPromise;
};

export = {
  mongoPoolPromise,
};

anyFile.ts

const { mongoPoolPromise } = require('./mongoUtil');

async function getProducts() {
  const db = await mongoPoolPromise();
  const data = await db
    .collection('myCollection')
    .find({})
    .toArray();
  console.log(data);
  return data;
}

export { getProducts };
Adam91Holt
sumber
Jawaban ditandai dengan javascript, jangan anggap jawaban TypeScript sesuai.
KPopOG