2015-10-12 4 views
5

के भीतर एक "स्थानीय" फ़ंक्शन कॉल करता है आप मॉड्यूल.एक्सपोर्ट घोषणा में किसी अन्य फ़ंक्शन के भीतर से फ़ंक्शन को कैसे कॉल करते हैं?नोड जेएस मॉड्यूल.एक्सपोर्ट

मेरे पास एमवीसी संरचना नोड जेएस प्रोजेक्ट और TestController.js नामक नियंत्रक है। मैं नियंत्रक के भीतर विधि का उपयोग करना चाहते हैं, लेकिन this उपयोग करते हुए कीवर्ड त्रुटि नीचे देता है:

cannot call method getName of undefined

"use strict" 
module.exports = { 
    myName : function(req, res, next) { 
     // accessing method within controller 
     this.getName(data); 
    }, 

    getName : function(data) { 
     // code 
    } 
} 

मैं कैसे नियंत्रक के भीतर तरीकों उपयोग करते हैं?

+1

'का मूल्य this' निष्पादन संदर्भ पर निर्भर करता पाया जाता है, कैसे समारोह परिभाषित किया गया है नहीं। – adeneo

उत्तर

12

मैं समाधान :-)

"use strict" 
var self = module.exports = { 
    myName : function(req, res, next) { 
     // accessing method within controller 
     self.getName(data); 
    }, 

    getName : function(data) { 
     // code 
    } 
} 
+0

'' यह .getName (डेटा) '' 'अभी भी काम करेगा, लेकिन नामकरण सम्मेलन सौंपने के साथ यह एक अच्छा विचार है – FrickeFresh

3

आप getName फ़ंक्शन ट्रफ module.exports तक पहुंच सकते हैं। इस तरह:

"use strict" 
module.exports = { 
    myName : function(req, res, next) { 
     // accessing method within controller 
     module.exports.getName(data); 
    }, 

    getName : function(data) { 
     // code 
    } 
} 
7

शायद आप इसे ऐसा कर सकते हैं। यह घोंसले को कम करता है। और आपका पूरा निर्यात आपकी फाइल के अंत में किया जाता है।

"use strict"; 

var _getName = function() { 
    return 'john'; 
}; 

var _myName = function() { 
    return _getName(); 
}; 

module.exports = { 
    getName : _getName, 
    myName : _myName 
}; 
+1

इस दृष्टिकोण का जोड़ा गया लाभ यह है कि फ़ंक्शन एक-दूसरे को संदर्भित कर सकते हैं (यानी '_myName'' _getName' को कॉल कर सकते हैं) –

+0

बिल्कुल, मुझे लगता है कि यह अन्य समाधान की तुलना में अधिक सुरुचिपूर्ण है। * स्वयं * का कोई उपयोग नहीं है और आप मॉड्यूल में निजी फ़ंक्शन जोड़ सकते हैं। – Sapher