Tek bir bağımsız modülde mongo bağlantı havuzlarını yönetin. Bu yaklaşım iki fayda sağlar. Öncelikle kodunuzu modüler ve test etmeyi kolaylaştırır. İkincisi, veritabanı bağlantınızı bir veritabanı bağlantı nesnesinin yeri DEĞİL olan istek nesnenizde karıştırmak zorunda değilsiniz. (JavaScript'in doğası göz önüne alındığında, kütüphane koduyla oluşturulan bir nesneye herhangi bir şey karıştırmanın çok tehlikeli olduğunu düşünürüm). Bu nedenle, sadece iki yöntemi ihraç eden bir modülü düşünmeniz gerekir. connect = () => Promise
ve get = () => dbConnectionObject
.
Böyle bir modül ile önce veritabanına bağlanabilirsiniz
// runs in boot.js or what ever file your application starts with
const db = require('./myAwesomeDbModule');
db.connect()
.then(() => console.log('database connected'))
.then(() => bootMyApplication())
.catch((e) => {
console.error(e);
// Always hard exit on a database connection error
process.exit(1);
});
Uçuş get()
sırasında uygulamanız bir DB bağlantısına ihtiyaç duyduğunda arayabilir .
const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example simple
Eğer db modülünüzü aşağıdaki gibi aynı şekilde kurarsanız, sadece bir veritabanı bağlantınız yoksa uygulamanızın önyükleme yapmamasını sağlamak için bir yolunuz olmayacaktır. Eğer bir bağlantınız yoksa.
// myAwesomeDbModule.js
let connection = null;
module.exports.connect = () => new Promise((resolve, reject) => {
MongoClient.connect(url, option, function(err, db) {
if (err) { reject(err); return; };
resolve(db);
connection = db;
});
});
module.exports.get = () => {
if(!connection) {
throw new Error('Call connect first!');
}
return connection;
}