2011-05-10 37 views
6

我正在爲node.js應用程序使用node-mysql驅動程序。而不必我的每個模特般的模塊,建立MySQL連接一遍又一遍的,我這樣做:Node.js - 模塊是否僅初始化一次?

// DB.js 
var Client = require('mysql').Client; 
var DB_NAME = 'test_db'; 
var client = new Client(); 
client.user = 'user'; 
client.password = 'pass'; 
client.connect(); 
client.query('USE '+DB_NAME); 
module.exports = client; 

// in User.js 
var db = require("./DB"); 
// and make calls like: 
db.query(query, callback); 

現在,我注意到DB.js被初始化與數據庫連接只有一次。因此,隨後使用相同的client對象...如何構造DB.js,以便當我從模型中需要它時,每次都將建立新的數據庫連接?我知道這與使用new有關,但我無法將其包裹在頭上。

回答

9
module.exports = function() { 
    var client = new Client(); 
    client.user = 'user'; 
    client.password = 'pass'; 
    client.connect(); 
    client.query('USE '+DB_NAME); 
    return client; 
} 

var db = require("./DB")() 

每次調用數據庫時都要初始化一個新客戶端。

您可以使用Object.defineProperty來定義exports自定義獲取器邏輯,因此如果需要可以執行var db = require("./DB")

+0

函數結尾應該有一個'return client;'。否則,'db.query()'不起作用。 – jeffreyveon 2011-05-11 16:38:23

+0

@jeffreyveon不能相信沒有人拿起這樣一個obvouis的錯誤。謝謝。 – Raynos 2011-05-11 16:41:20