2012-10-17 32 views
8

क्या कोई ऐसा एक्सप्रेस है जो एक पारंपरिक मार्ग पर पारंपरिक नियंत्रक के साथ अलग या अधिक शक्तिशाली है?node.js एक्सप्रेस रूट और नियंत्रक के बीच क्या अंतर है?

यदि आपके पास एक एक्सप्रेस ऐप है और मॉडल को परिभाषित करता है, तो क्या यह एक एमवीसी एप्लीकेशन बन जाता है, या क्या वहां अधिक आवश्यक है?

मैं सोच रहा हूं कि क्या मैं अपने नोड एक्सप्रेस ऐप्स में अतिरिक्त/आसान कार्यक्षमता पर अधिक वैध 'नियंत्रक' को अपग्रेड नहीं कर रहा हूं। अगर ऐसी कोई चीज है।

धन्यवाद!

संपादित करें:, स्पष्ट करने के लिए यदि आप ऐसा तरह एक मार्ग का उपयोग करें:

// routes/index.js 
exports.module = function(req, res) { 
    // Get info from models here, 
    res.render('view', info: models); 
} 

क्या यह किसी भी एक नियंत्रक से अलग बनाती है? क्या नियंत्रक अधिक करने में सक्षम है?

उत्तर

10

एक्सप्रेस में सभी मार्गों में से पहला मध्यवर्ती है जो कनेक्ट में परिभाषित है। एक्सप्रेस और अन्य ढांचे के बीच का अंतर यह है कि मिडलवेयर ज्यादातर नियंत्रक के सामने बैठता है और नियंत्रक प्रतिक्रिया समाप्त करता है। मध्यवर्ती का उपयोग करने का एक अन्य कारण नोड.जेएस की प्रकृति के रूप में अतुल्यकालिक है।

चलिए देखते हैं कि जावास्क्रिप्ट में नियंत्रक कैसा दिख सकता है।

var Controller = function() { }; 

Controller.prototype.get = function (req, res) { 

    find(req.param.id, function (product) { 

    res.locals.product = product; 

    find(res.session.user, function (user) { 

     res.locals.user = user; 
     res.render('product'); 

    }); 

    }); 

}; 

पहली चीज़ जो आपको शायद इस बारे में नोटिस करती है, वह नेस्टेड कॉलबैक है। परीक्षण करना मुश्किल है, पढ़ना मुश्किल है और यदि आपको सामानों को संपादित करने की आवश्यकता है तो आपको अपने इंडेंटेशन के साथ परेशान करने की आवश्यकता है। तो चलो प्रवाह नियंत्रण का उपयोग करके इसे ठीक करें और इसे सपाट बना दें।

var Controller = function() { }; 

Controller.prototype.update = function (req, res) { 

    var stack = [ 

    function (callback) { 

     find(req.param.id, function (product) { 
     res.locals.product = product; 
     callback(); 
     }); 


    }, 

    function (callback) { 

     find(res.session.user, function (user) { 
     res.locals.user = user; 
     callback(); 
     }); 

    } 

    ]; 

    control_flow(stack, function (err, result) { 
    res.render('product'); 
    }); 

} 

इस उदाहरण में आप ढेर के सभी विभिन्न कार्यों को निकालने और उन्हें परीक्षण या यहां तक ​​कि अलग-अलग मार्गों के लिए उन्हें फिर से उपयोग कर सकते हैं। आपने देखा होगा कि नियंत्रण प्रवाह संरचना मिडलवेयर की तरह दिखती है। तो हमारे मार्ग में ढेर को मिडलवेयर के साथ प्रतिस्थापित करने दें।

app.get('/', 

    function (req, res, next) { 

    find(req.param.id, function (product) { 
     res.locals.product = product; 
     next(); 
    }); 

    }, 

    function (req, res, next) { 

    find(res.session.user, function (user) { 
     res.locals.user = user; 
     next(); 
    }); 

    }, 

    function (req, res, next) { 
    res.render('product'); 
    } 

); 

इसलिए जब यह तकनीकी रूप से नियंत्रकों express.js में आप शायद प्रवाह नियंत्रण संरचनाओं, जो अंत में मध्यस्थ के रूप में ही है उपयोग करने के लिए मजबूर किया जाएगा करने के लिए संभव हो सकता है।