2011-05-10 35 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