मैं अपने नोडजेएस अनुप्रयोग को ढूढ़ने के लिए मॉड्यूल बनाना चाहता हूं, लेकिन मैं थोड़ा खो गया हूं, और मुझे कुछ भी नहीं मिला है (खोज के घंटों के साथ) जो विषय पर पूरी तरह से निश्चित है ।एक नोडजेएस मॉड्यूल का निर्माण - चर और विधियां
var newUser = new User();
आदर्श रूप में, मैं के शीर्ष पर मेरी मॉड्यूल की आवश्यकता होगी:
मैं एक "उपयोगकर्ता" मॉड्यूल बनाना चाहते हैं, जिसमें से मैं की तरह कुछ का उपयोग कर मेरी कोड में नए उपयोगकर्ताओं को बना सकते हैं कहो मेरा कोड कुछ ऐसा उपयोग कर रहा है:
var User = require('../lib/user');
यह बहुत अच्छा काम करता है। सवाल यह है कि, मैं उपयोगकर्ता मॉड्यूल को कैसे ढूढ़ूं? क्या निम्नतम तरीका सबसे अच्छा तरीका है?
module.exports = function User() {
var authorized = false;
var username = undefined;
var password = undefined;
var statistics = undefined;
this.authorized = function() {
return authorized;
}
this.username = function() {
return username;
}
this.statistics = function() {
return statistics;
}
}
मैं अपने विभिन्न मॉड्यूल चर के लिए getters और setters लिख रहा हूँ, मुझे बातें मैंने गलती से अन्य कोड से उपयोग करने के लिए नहीं करना चाहते हैं छिपाने के लिए अनुमति देता है। हालांकि, मैंने इसे पहले इस तरह से किया है:
function User() {
this.authStatus = false;
this.email;
this.displayName;
this.inSession;
}
User.prototype.isAuthenticated = function() {
return(this.authStatus && this.email && this.displayName)
}
User.prototype.isInSession = function() {
return(this.inSession && this.isAuthenticated());
}
exports.User = User;
यह एक चेतावनी के साथ भी काम करता है; मुझे बंदरगाहों के भीतर से उपयोगकर्ता गुणों तक पहुंचने का कोई तरीका नहीं मिला है। यदि मेरी समझ सही है, दूसरे कार्यान्वयन के साथ, मैं नहीं कर सकता। इसका मतलब है कि अगर मुझे उपयोगकर्ता की संपत्तियों को संपादित करने के लिए कॉलबैक के रूप में एक डीबी लाइब्रेरी में फ़ंक्शन को बंद करने की आवश्यकता है, तो मैं नहीं कर सकता। यही कारण है कि कुछ इस तरह दिखाई चाहते हैं:
User.prototype.login = function() {
db.doDbStuff('get user data query', function(_error, _result) {
this.username = _result[0].name; //this code will not work
});
}
कोड काम नहीं करता है, मेरी समझ है, क्योंकि "इस" कीवर्ड बंद, नहीं उपयोगकर्ता के दायरे के भीतर है। भले ही कोड उपयोगकर्ता फ़ंक्शन के भीतर रखा जाना था:
function User() {
this.login = function() { //you know
यह काम नहीं करेगा।
मुझे लगता है कि मेरा सवाल है, इस समस्या का सबसे अच्छा समाधान क्या है? क्या यह पहला कोड ब्लॉक में प्रस्तुत किया गया तरीका है? ऐसा लगता है कि यह बोझिल और गन्दा और परिवर्तनीय टकराव के लिए प्रवण है। मुझे डर लग रहा है।
अग्रिम धन्यवाद!
यदि इनमें से कोई भी समझ में नहीं आया, तो मैं पहले से माफ़ी मांगता हूं, मैंने अपने ज्ञान दांतों के लिए कुछ दर्द दवा ली और मुझे थोड़ी हल्की और फंकी लगती है। –
आम तौर पर node.js के साथ करने के बजाए जावास्क्रिप्ट आर्किटेक्चर के दायरे में अधिक खून बहता है। http://speakerdeck.com/u/addyosmani/p/scaling-your-javascript- एप्प्लिकेशंस और http://www.slideshare.net/SlexAxton/superclassy-inheritance-in-javascript काफी अच्छे हैं। – balupton
यह ध्यान देने योग्य है कि आपके दोनों उदाहरणों में चर निजी नहीं हैं। आपको यह देखना चाहिए: http://javascript.crockford.com/private.html –