2011-05-10 10 views
6

Estoy usando el controlador node-mysql para una aplicación node.js. En lugar de tener que configurar la conexión de MySQL una y otra vez para cada uno de mis módulos en modelos como, hago esto:Node.js: ¿los módulos se inicializan solo una vez?

// 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); 

Ahora, noto que DB.js se inicializa con la conexión de base de datos sólo una vez . Entonces, posteriormente se está utilizando el mismo objeto client ... ¿Cómo estructura DB.js de manera que cuando lo requiera desde un modelo, cada vez que se establece una nueva conexión de base de datos? Sé que tiene algo que ver con el uso de new, pero no soy capaz de entenderlo.

Respuesta

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")() 

Inicialice un nuevo cliente cada vez que llame a la base de datos.

Puede usar Object.defineProperty para definir exports con lógica de captador personalizado para que pueda hacer var db = require("./DB") si lo desea.

+0

Debe haber un 'cliente de retorno;' al final de la función. De lo contrario, 'db.query()' no funcionará. – jeffreyveon

+0

@jeffreyveon no puede creer que nadie haya captado un error tan obvio. Gracias. – Raynos

Cuestiones relacionadas