Jak prawidłowo ponownie wykorzystać połączenie z Mongodb między aplikacjami i modułami NodeJs

124

Czytałem i czytałem i nadal nie wiem, jaki jest najlepszy sposób udostępniania tego samego połączenia z bazą danych (MongoDb) w całej aplikacji NodeJs. Jak rozumiem, połączenie powinno być otwarte podczas uruchamiania aplikacji i ponownie używane między modułami. Mój obecny pomysł na najlepszy sposób jest takiserver.js (główny plik, w którym wszystko się zaczyna) łączy się z bazą danych i tworzy zmienną obiektową, która jest przekazywana do modułów. Po podłączeniu ta zmienna będzie używana przez kod modułu w razie potrzeby i to połączenie pozostanie otwarte. Na przykład:

    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

potem kolejny moduł models/user wygląda tak:

Users = function(app, mongo) {

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

Users.prototype.getAll = function() {

    return "all users " + mongo.dbUsers;

    }
}

module.exports = Users;

Teraz mam okropne przeczucie, że to źle, więc czy są jakieś oczywiste problemy z tym podejściem, a jeśli tak, to jak je ulepszyć?

spirytus
źródło
To samo pytanie, które zadałem kilka dni temu. stackoverflow.com/questions/24547357/…
Salvador Dali,
Sprawdź sterownik mongoista . Jest " zbudowany z myślą o async / await " i pozwala leniwie eksportować połączenia, takie jak module.exports = mongoist(connectionString);. (Przeczytaj o connectionStringMongoDB Manual.)
Alexandr Nil

Odpowiedzi:

151

Możesz utworzyć mongoUtil.jsmoduł, który będzie miał funkcje zarówno do łączenia się z mongo, jak i zwracania instancji 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;
  }
};

Aby go użyć, zrobiłbyś to w swoim app.js:

var mongoUtil = require( 'mongoUtil' );

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

A potem, gdy potrzebujesz dostępu do mongo w innym miejscu, np. W innym .jspliku, możesz to zrobić:

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

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

Powodem, dla którego to działa, jest to, że w węźle, gdy moduły są ` require` d '', są ładowane / pozyskiwane tylko raz, więc zawsze będziesz mieć tylko jedną instancję _dbimongoUtil.getDb() zawsze zwrócisz tę samą instancję.

Uwaga, kod nie został przetestowany.

go-oleg
źródło
6
Świetny przykład! Mam jednak pytanie. Jak by to działało w przypadku uruchamiania aplikacji z wieloma klastrami? Czy uruchomi kolejną instancję połączenia, czy po prostu użyje istniejącego połączenia ze źródła?
Farhan Ahmad
19
Jak poradzisz sobie w przypadku, gdy pomiędzy przerwami zanika połączenie mongo? Wszystkie wywołania metody getDb () w tym scenariuszu zakończyłyby się niepowodzeniem, aż do ponownego uruchomienia aplikacji węzła.
Ayan
4
Próbowałem tego kodu, ale otrzymałem wartość null po wykonaniu mongoUtil.getDb (), nie wiem, dlaczego tak jest.
Keming
3
@KemingZeng - musisz upewnić się, że wszystkie moduły używające mongoUtil są importowane w app.jsramach funkcji wywołania zwrotnego programu connectToServer. Jeśli ustawisz requireje app.jswcześniej _db, otrzymasz niezdefiniowane błędy w innych modułach.
Mike R
2
Od wersji 4 mongoDB tak powinno być var database = mongoUtil.getDb(); database.db().collection( 'users' ).
Julian Veerkamp
26

Istnieje wiele sposobów, w jakie można to zmienić, aby akceptować obiekty konfiguracyjne w miejscach, ale ogólnie jest to podobne do tego, jak masz ułożony kod, aczkolwiek z bardziej nowoczesną składnią JS. Można go łatwo przepisać na prototypy i wywołania zwrotne, jeśli takie są Twoje wymagania.

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
źródło
To najładniejsze podejście, z jakim się spotkałem
KalenGi
Zdaję sobie sprawę, że ta odpowiedź ma prawie rok i tak naprawdę nie oczekuję więcej informacji, ale wydaje mi się, że jest to podejście, które najbardziej bym chciał zastosować, ale nie mam szczęścia wyciągnąć zniszczonego obiektu Users z pliku mongo. Mam plik bardzo podobny do twojego someFile.js, ale wiersz 4, w którym wywołujesz Users.addUser, zawsze mi się wysadza - mówi, że Users jest niezdefiniowana. Czy jest jakiś oczywisty element, którego mi brakuje?
Rob E.
Skończyło się na utworzeniu nowego pytania, ponieważ bardzo mnie to wkurza.
Rob E.
to nie powinno działać technicznie. Wymagaj buforuje obiekt w pierwszym wywołaniu. W tym przypadku buforuje tylko obiekt zwrócony przez konstruktora. Wywołanie „init” później nie ma wpływu na to, co zostanie zwrócone. Więc ta stała {Users} = require ('./ mongo') powinna zawieść, ponieważ w wyniku w pamięci podręcznej nie będzie żadnej właściwości 'User'.
beNerd
require.cache przechowuje odniesienie do obiektu, które jest współużytkowane przez wszystkie pliki wymagające tego obiektu. Obiekty, które mogą być modyfikowane przez akcje z innych części programu (lub nawet same, jeśli używasz timerów). Możesz to szybko przetestować, ale wrzuciłem szybki długopis do demo: Codesandbox.io/s/awesome-water-cexno
EddieDean
19

Oto, jak robię to za pomocą współczesnej składni na przykładzie go-olega. Mój jest przetestowany i funkcjonalny.

W kodzie umieściłem kilka komentarzy.

./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
źródło
czy próba złapania w pierwszym fragmencie jest konieczna? funkcja connect jest funkcją asynchroniczną. Błąd jest już przechwytywany przy użyciu wywołania zwrotnego w stylu węzła.
cholery
1
To bardzo spostrzegawcze pytanie, które uwielbiam. Nie jestem pewien bez dokładniejszego zbadania go w środowisku, w którym umieszczasz kod. Będzie ograniczona liczba ścieżek, które może obrać podczas wykonywania kodu. Dodałem go głównie po to, aby pokazać, że można tam umieścić niestandardową procedurę obsługi i ponieważ domyślnie włączam try / catch do funkcji asynchronicznych. To po prostu punkt zaczepienia. Dobre pytanie. Zaktualizuję, jeśli znajdziesz dodatkową notatkę.
agm1984
za każdym razem, gdy wywołuję getDB (), utworzy to nowe połączenia, prawda?
Vinay Pandya
18

Jeśli używasz Express, możesz użyć modułu express-mongo-db , który pozwala uzyskać połączenie db w obiekcie żądania.

zainstalować

npm install --save express-mongo-db

server.js

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

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

route / users.js

app.get('/', function (req, res, next) {
    req.db // => Db object
});
Mukesh Chapagain
źródło
8

go-oleg ma w zasadzie rację, ale w dzisiejszych czasach (prawdopodobnie) nie chcesz używać samego "mongodb", raczej użyj jakiegoś frameworka, który wykona za ciebie dużo "brudnej roboty".

Na przykład mangusta jest jedną z najczęstszych. Oto, co mamy w naszym początkowym server.jspliku:

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

To wszystko, czego potrzeba, aby go skonfigurować. Teraz użyj tego w dowolnym miejscu w kodzie

const mongoose = require('mongoose');

Otrzymujesz instancję, z którą skonfigurowałeś mongoose.connect

libik
źródło
1
mangusta to ORM. Przeczytaj to, aby dowiedzieć się o możliwych pułapkach tego samego. Bez wątpienia ORM są świetne, gdy są używane do procesu rozwoju i uczenia się, ale nie do produkcji. Miej to na uwadze
Saras Arya
1
Mongoose wymaga również schematów. Używam pakietu MongoDB w ramach trwałości poliglota z Neo4j, więc dobrze jest zdefiniować właściwości dokumentu zgodnie z potrzebami.
agm1984,
7

Zainicjuj połączenie jako obietnicę:

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

A następnie zadzwoń do połączenia, gdy chcesz wykonać akcję na bazie danych:

    // 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
źródło
7

Sprawdzone rozwiązanie na podstawie zaakceptowanej odpowiedzi:

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;

activity.js - trasa:

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
źródło
Ta odpowiedź jest kompletna i funkcjonalna.
Ahmad Sharif
7

Oto moja konfiguracja w 2020 roku:

./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
źródło
3

możemy utworzyć plik dbconnection, taki jak 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;
        }

    };

a następnie użyj tego pliku w swojej aplikacji, np

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

a następnie użyj w ten sposób wewnątrz funkcji asynchronicznej

db  = await connection.connect();

mam nadzieję, że to zadziała

gaurav
źródło
2

Trochę się spóźniłem, ale dodam też moje rozwiązanie. To znacznie bardziej hałaśliwe podejście w porównaniu z odpowiedziami tutaj.

W każdym razie, jeśli używasz MongoDB w wersji 4.0 i Node.js 3.0 (lub nowszych wersjach), możesz użyć isConnected()funkcji z 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");
}

To działało dobrze dla mnie. Mam nadzieję, że to pomoże.

Roshana Pitigala
źródło
2

Spóźniłem się na imprezę, ale mam nadzieję, że ta odpowiedź komuś pomoże, oto kod funkcjonalny:

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}

Eksportujemy jedną funkcję, aby połączyć się z mongo, a drugą, aby uzyskać instancję połączenia.

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')})

});

Po zainicjowaniu połączenia musimy spełnić żądanie modułu auth, w przeciwnym razie funkcja getDb zwróci wartość undefined.

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
źródło
2

Ponieważ jest to oznaczone jako Express, pomyślałem, że wspomnę, że Express ma wbudowaną funkcję udostępniania danych między trasami. Istnieje obiekt o nazwie app.locals. Możemy dołączyć do niego właściwości i uzyskać do niego dostęp z wnętrza naszych tras. Po prostu tworzysz instancję połączenia mongo w pliku app.js.

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'));

Dostęp do tego połączenia z bazą danych można teraz uzyskać w ramach tras, jak pokazano poniżej, bez konieczności tworzenia i wymagania dodatkowych modułów.

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));
});

Ta metoda zapewnia, że ​​masz otwarte połączenie z bazą danych na czas działania aplikacji, chyba że zdecydujesz się je zamknąć w dowolnym momencie. Jest łatwo dostępny req.app.locals.your-collectioni nie wymaga dodatkowych modułów.

Hoppo
źródło
Uważam, że to najczystsze podejście. Czy mamy jakieś możliwe wady tego podejścia? Używam go i wygląda dla mnie całkiem nieźle, podzieliłbym się moją wiedzą.
Priya Ranjan Singh
@PriyaRanjanSingh Szczerze mówiąc, nie znam żadnych wad, ale w żadnym wypadku nie jestem w tym ekspertem. Odkryłem tę metodę po przeprowadzeniu badań, ponieważ inne metody znalazłem nieporadnie i szukałem czystszego, bardziej zrozumiałego kodu dla własnej korzyści. Miejmy nadzieję, że ktoś bardziej kompetentny niż ja będzie w stanie wskazać, czy są jakieś wady.Jednak od jakiegoś czasu używam tej metody bez żadnych problemów i wydaje się, że działa dobrze.
Hoppo
1

Jeśli zdecydujesz się na używanie mongoose w swojej aplikacji, wyedytuj plik app.js za pomocą następującego fragmentu

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);
  });`

Następny krok: Zdefiniuj modele dla swojej aplikacji, wymagaj ich i wykonaj bezpośrednio operację CRUD, na przykład

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);

Zastosowanie 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....
  }

Nie musisz zawsze łączyć się z mogoDB ....

Naresh_Varma
źródło
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
źródło
1
Czy możesz dodać krótki opis?
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
źródło
0

Uważam, że to działa dobrze :)

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
źródło
Odpowiedź jest oznaczona tagiem javascript, nie myśl, że odpowiedź TypeScript jest odpowiednia.
KPopOG