Możesz utworzyć mongoUtil.js
moduł, który ma funkcje zarówno do łączenia się z mongo, jak i do 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ć, zrób 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 gdzie indziej, jak w innym .js
plik, 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
cóż, są one ładowane/pozyskiwane tylko raz, więc zawsze będziesz mieć tylko jedną instancję _db
i mongoUtil.getDb()
zawsze zwróci tę samą instancję.
Uwaga, kod nie został przetestowany.