Tôi đã đọc đi đọc lại và vẫn còn bối rối về cách tốt nhất để chia sẻ cùng một kết nối cơ sở dữ liệu (MongoDb) trên toàn bộ ứng dụng NodeJs. Theo tôi hiểu, kết nối sẽ được mở khi ứng dụng khởi động và sử dụng lại giữa các mô-đun. Ý tưởng hiện tại của tôi về cách tốt nhất là server.js
(tệp chính nơi mọi thứ bắt đầu) kết nối với cơ sở dữ liệu và tạo biến đối tượng được chuyển đến các mô-đun. Sau khi kết nối, biến này sẽ được mã mô-đun sử dụng khi cần thiết và kết nối này vẫn mở. Ví dụ:
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
sau đó mô-đun khác models/user
trông giống như vậy:
Users = function(app, mongo) {
Users.prototype.addUser = function() {
console.log("add user");
}
Users.prototype.getAll = function() {
return "all users " + mongo.dbUsers;
}
}
module.exports = Users;
Bây giờ tôi cảm thấy kinh khủng rằng điều này là sai, vậy có vấn đề rõ ràng nào với cách tiếp cận này không và nếu có thì làm thế nào để làm cho nó tốt hơn?
module.exports = mongoist(connectionString);
. (Đọc về connectionString
trong MongoDB tay.)