2016-05-25 72 views
0

在我下面的代碼中,我試圖在「/ post」請求之前打開數據庫連接。我可以使用全局連接來解決下面的問題,但是有沒有其他方法可以通過將db連接綁定到當前請求來完成。只對所有請求打開數據庫連接一次

//Model.js 
function DB(){ 
    this.DBConn (req, res, next) { 
     var conn = <db connection string>; 
     pg.connect(conn, function (err, client) { 
     req.db = client; 
     }) 
    this.create (req, res, next) { 
     // Using req.db.query(), to execute INSERT query 
     } 
    } 
} 
//server.js 
var DB = require('./model.js'); 
var app = express.Router(); 
// Open DB connection 
new DB.DBConn(); //How to pass request in this function 
app.post('/post', DB.create); 

回答

0

假設您使用Express 4只是一個建議我會使用路由器對象,而不是應用程序。但不管怎麼說,如果你爲你的數據庫創建一個模塊,它會將實例放在它的內部,只需從我的github repo here下拉樣本即可。

如果你仔細看看它,你會注意到,如果你將數據庫作爲一個模塊,然後有一個初始化函數,當你的應用程序被創建時它會被調用,它提供了它遵循微服務所需的抽象架構模式以及爲您提供單一連接調用,因此您不會一直關閉/打開。

下面

是database.js文件

var mongodb = require('mongodb'); 
 

 
var uri = 'some database connection string for mongodb '; 
 

 
function initilizeDb(cb) { 
 
    mongodb.connect(uri, function(err, db) { 
 
    if (err) { 
 
     cb(err); 
 
     return; 
 
    } 
 

 
    exports.db = db; //this is the part you need to do in sql connection or w.e after you get the async connection handler. 
 
    cb(null); 
 
    }); 
 
}; 
 

 
exports.initDb = initilizeDb;

,你可以看到我們出口的初始化函數內的initialDb功能和exports.db。所有模塊與同一模塊共享一個實例,這就是數據庫引用有效的原因。

沒有理由繼續傳遞實例,它只是在重構或尋找錯誤時帶來層次關注。儘可能多的文摘 - 合理。

相關問題