javascript - Cách tốt nhất để mở một kết nối cơ sở dữ liệu (mongo) lâu dài trong NodeJS là gì
Tôi đang sử dụng các driver node-mongodb-native và tôi đang tìm cách để mở một kết nối cơ sở dữ liệu bền vững thay vì mở/đóng nó mỗi lần.
Một kết nối đơn giản hóa có thể trông như thế này...
var DB = new mongo.Db('vows', new mongo.Server("127.0.0.1", 27017, {})),
connection = DB.open(function(err, db) {
// Here we have access to db
});
Làm thế nào để tôi có thể khiến đối tượng db có thể truy cập được từ bất kỳ module nào trong ứng dụng của tôi? Thay vì phải mở kết nối cho từng module riêng lẻ?
Điều này có thể thực hiện được bằng module.exports không? Hay bằng một biến toàn cục?
Câu trả lời #1
Giải pháp của tôi:
getClient = function(cb) {
if(typeof client !== "undefined") {
return cb(null, client);
} else {
db.open(function(err, cli) {
client = cli;
getClient(cb);
});
}
}
Bây giờ, thay vì
db.open(function(err, client) {
...stuff...
});
Làm :
getClient(function(err, client) {
...stuff...
});
Cuộc gọi db đầu tiên của bạn mở một kết nối, những cuộc gọi khác sử dụng kết nối đó.
Nhân tiện: có gợi ý nào để kiểm tra xem khách hàng vẫn còn hoạt động không?
Câu trả lời số 2
Chỉnh sửa: Đừng sử dụng mongoose, hãy sử dụng thứ gì đó như mongo-col hoặc mongo-client. Sau đó, hãy để một client duy nhất mở trong ứng dụng của bạn. Tôi có file ./client.js xuất ra một client mongo đã được mở và cấu hình đúng cách.
Mongoose là một lớp trừu tượng vững chắc trên mongodb cho phép bạn xử lý mongodb dễ dàng hơn. Nó đáng để bạn xem qua.
Điều bạn thực sự muốn làm là mở lại client của mình mỗi lần bạn làm bất cứ điều gì với mongo.
Bạn không giữ kết nối mở với bất kỳ cơ sở dữ liệu nào khác.
Chỉ cần đặt DB của bạn trong một module cùng với một số hàm trợ giúp/hàm bao bọc.
