2011-05-10 3 views
6

node.js 앱에 node-mysql 드라이버를 사용하고 있습니다. 내가 DB.js 한 번만 DB 연결을 초기화 것을 알 지금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); 

대신 설정하기 위해 MySQL의 연결을 통해 또 다시 내 모델 같은 각 모듈에 대한 필요없이, 나는 이렇게 . 그럼, 이후 동일한 client 개체가 사용되고 있습니다 ... DB.js 내가 모델에서 그것을 필요로 할 때마다, 새로운 DB 연결이 설정 될 때마다 어떻게 구조합니까? 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을 사용하면 에 맞춤형 게터 로직을 정의 할 수 있으므로 원하는 경우 var db = require("./DB") 할 수 있습니다.

+0

함수의 마지막에'return client; '가 있어야합니다. 그렇지 않으면'db.query()'가 작동하지 않습니다. – jeffreyveon

+0

@ jeffreyveon은 아무도 그런 망령 실수를 포착했다고 믿을 수 없습니다. 감사. – Raynos