2012-01-12 5 views
21

मेरे पास एक मॉड्यूल.जेएस है जिसे लोड किया जाना चाहिए; काम करने के क्रम में ऑब्जेक्टएक्स की जरूरत है;node.js में फ़ाइल की आवश्यकता कैसे है और अनुरोध विधि में कोई तर्क पारित करें, लेकिन मॉड्यूल के लिए नहीं?

मैं node.js द्वारा प्रदान की गई आवश्यकता विधि में module.js को ऑब्जेक्टएक्स कैसे पास करूं?

धन्यवाद

// my module.js 
objectX.add('abc'); 
// error: objectX is undefined 

मैं अपने सभी वर्गों को बदलने के लिए, क्योंकि बहुत समय ले जाएगा बिना यह करने के लिए एक तरह से चाहते हैं ... और वे जिस तरह से यह है क्लाइंट साइड के लिए अच्छा प्रदर्शन किया है । (मैं सर्वरफाइल के साथ क्लाइंटफ़ाइल मिश्रण करता हूं ***)

उत्तर

45

मॉड्यूल है कि आप एक ही समारोह निर्यात कर सकते हैं लिखें। जब आपको मॉड्यूल की आवश्यकता होती है, तो फ़ंक्शन को अपने प्रारंभिक तर्क के साथ कॉल करें। वह फ़ंक्शन एक ऑब्जेक्ट (हैश) लौटा सकता है जिसे आप अपने चर में आवश्यकता-मॉड्यूल में रखते हैं।

main.js

var initValue = 0; 
var a = require('./arithmetic')(initValue); 
// It has functions 
console.log(a); 
// Call them 
console.log(a.addOne()); 
console.log(a.subtractOne()); 

arithmetic.js:

module.exports = function(initValue) { 
    return { 
    addOne: function() { 
     return initValue + 1; 
    }, 
    subtractOne: function() { 
     return initValue - 1; 
    }, 
    } 
} 
+0

प्रश्न में कुछ जानकारी जोड़ दी है मैंने अपना प्रश्न अपडेट किया है: मैं सभी फाइलों को बदलने की ज़रूरत नहीं है ... –

+1

वैसे मुझे यह कहना नफरत है लेकिन ऑब्जेक्टएक्स को वैश्विक होना जरूरी है। अपनी कॉलिंग फ़ाइल में आप 'global.objectX =" hi "सेट कर सकते हैं – kgilpin

2

कुछ इनिट विधि निर्यात करने और आवश्यकता के बाद पैरामीटर के रूप में ऑब्जेक्टएक्स को पास करने जैसे कामकाज के बारे में क्या?

var module = require('moduleJS'); 
module.init(objectX) 
+0

मैं है: t.add ({... वर्ग

var x = 0; // Some private module data exports.init = function(nx) { x = nx; // Initialize the data return exports; }; exports.sayHi = function() { console.log("HELLO THERE "+x); }; 

और फिर इस तरह यह की जरूरत पड़ेगी। ..}); लेकिन "टी" अनिर्धारित है। मुझे किसी भी तरह से पारित होने के लिए मॉड्यूल में "टी" की आवश्यकता होगी .. मैंने –

14

आपको एक "init" विधि में चेनिंग द्वारा वास्तविक निर्यात वस्तु को बदलने से बच सकते हैं (यह जो कुछ भी आप का नाम दूसरे शब्दों में चाहते हैं)।

मॉड्यूल TestModule.js: वर्गों है कि इस तरह कर रहे हैं की एक बहुत कुछ

var TM = require('./TestModule.js').init(20); 
TM.sayHi(); 
संबंधित मुद्दे