Quản lý nhóm kết nối mongo trong một mô-đun độc lập. Cách tiếp cận này cung cấp hai lợi ích. Đầu tiên, nó giữ cho mã của bạn được mô-đun và dễ kiểm tra hơn. Thứ hai, bạn không bị buộc phải trộn kết nối cơ sở dữ liệu của bạn trong đối tượng yêu cầu của bạn KHÔNG phải là nơi dành cho đối tượng kết nối cơ sở dữ liệu. (Với bản chất của JavaScript, tôi sẽ cho rằng rất nguy hiểm khi trộn lẫn bất cứ thứ gì vào một đối tượng được xây dựng bằng mã thư viện). Vì vậy, với điều đó bạn chỉ cần xem xét một mô-đun xuất hai phương thức. connect = () => Promise
và get = () => dbConnectionObject
.
Với một mô-đun như vậy, trước tiên bạn có thể kết nối với cơ sở dữ liệu
// 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);
});
Khi đang bay, ứng dụng của bạn chỉ cần gọi get()
khi cần kết nối DB.
const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example simple
Nếu bạn thiết lập mô-đun db của mình theo cách tương tự như sau, bạn sẽ không có cách nào để đảm bảo rằng ứng dụng của bạn sẽ không khởi động trừ khi bạn có kết nối cơ sở dữ liệu, bạn cũng có cách truy cập nhóm kết nối cơ sở dữ liệu của mình. nếu bạn không có kết nối.
// 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;
}