[英]node.js design pattern for creating db connection once
我正在尋求有關在我的 node.js 應用程序中創建數據庫連接的設計模式的幫助。
這樣做似乎很明顯:
模塊1:
var db;
exports.get_db = function(callback) {
if (db == null) {
dblibrary.create(connection_params, function(error, conn) {
if (error == null) {
db = conn;
callback(null, db);
}
});
} else {
callback(null, db);
}
};
模塊2:
exports.do_something = function () {
module1.get_db(function (err, conn) {
if (err == null) {
// continue using query
}
});
};
必須懲罰每個想要使用回調要求獲得數據庫連接的人似乎很痛苦。
我可以這樣做:
模塊1:
var db;
dblibrary.create_connection(connection_params, function (err, conn) {
if (err != null) {
console.log("can't create connection");
console.log(err);
process.exit();
} else {
db = conn;
}
});
exports.get_db = function() {
return db;
};
這使得獲取數據庫連接變得簡單而快速,但這意味着我們必須在節點啟動時“等待”才能建立連接。
哪個設計更好? 有沒有更好的做事方式?
mydb.js
模塊:
var db
exports.db = function() {
if (db === null) {
db = dblibrary.createClient()
}
return db
}
其他模塊:
var db = require('mydb').db()
...
db.query(...)
這會在啟動時創建一次數據庫客戶端實例。 我喜歡這個解決方案,因為創建代碼被封裝在一個單獨的模塊中,其他模塊可以通過一個 require() 語句訪問客戶端。
我見過的最佳答案是:
在 start.js 中:
function init_done() {
app.listen(8080);
}
init_databases(init_done);
在 database.js 中:
init_databases(init_done_cb) {
db.create_async(/* connect data */ , function (err, res) {
if (err == null) init_done_cb();
});
}
這樣您就可以在沒有尷尬/危險的等待期的情況下進行數據庫服務器的異步啟動。
我寫了一次連接只是為了解決這類問題。 該模塊實現了兩個主要目標:
您可以查看express-mongo-db和express-mongoose-db作為使用示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.