2011-05-10 9 views
6

मैं node.js ऐप के लिए नोड-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 डीबी कनेक्शन के साथ केवल एक बार initialised है: इसके बजाय सेट अप करने के लिए mysql कनेक्शन बार बार अपने मॉडल की तरह मॉड्यूल से प्रत्येक के लिए होने का, मैं यह कर । तो, बाद में उसी client ऑब्जेक्ट का उपयोग किया जा रहा है ... मैं डीबी.जेएस कैसे बना सकता हूं जैसे कि जब मुझे इसे मॉडल से आवश्यकता होती है, हर बार एक नया डीबी कनेक्शन सेट अप किया जाएगा? मुझे पता है कि 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") क्या कर सकते हैं अगर आप चाहते हैं कस्टम गेटर तर्क के साथ exports परिभाषित करने के लिए कर सकता है।

+0

फ़ंक्शन के अंत में 'रिटर्न क्लाइंट 'होना चाहिए। अन्यथा, 'db.query()' काम नहीं करेगा। – jeffreyveon

+0

@jeffreyveon विश्वास नहीं कर सकता कि किसी ने भी इस तरह की एक obvouis गलती उठाई। धन्यवाद। – Raynos