2015-11-10 5 views
5

https://github.com/hwz/chirp/blob/master/module-5/completed/routes/api.jsवापसी अगले() NodeJS भ्रम की स्थिति में

function isAuthenticated (req, res, next) { 
    // if user is authenticated in the session, call the next() to call the next request handler 
    // Passport adds this method to request object. A middleware is allowed to add properties to 
    // request and response objects 

    //allow all get request methods 
    if(req.method === "GET"){ 
     return next(); 
    } 
    if (req.isAuthenticated()){ 
     return next(); 
    } 

    // if the user is not authenticated then redirect him to the login page 
    return res.redirect('/#login'); 
}; 

क्यों लेखक return next() बजाय next() क्या करता है? मुझे पता है कि next() फ्लो को अगली मिडलवेयर या फ़ंक्शन पर जाने देना है, लेकिन इसे return को next() के ऊपर क्यों चाहिए?

+0

तो 'प्रमाणीकृत' जो कुछ भी अगला() 'रिटर्न देता है। यह एक उपयोगी मूल्य नहीं हो सकता है, आपको दिमाग। –

+2

http://stackoverflow.com/questions/16810449/when-to-use-next-and-return-next-in-node-js के संभावित डुप्लिकेट लेकिन यह मान्य और अच्छा प्रश्न –

+0

एक्सप्रेस मध्य-सामान के संदर्भ में मध्य-बर्तन के उस विशिष्ट टुकड़े को निष्पादित करने के लिए इसे रोकना चाहिए यदि यह बयानों में से किसी एक में गिरना चाहिए। कॉलिंग 'अगली' एक्सप्रेस को बताती है 'मैंने यहां किया है' हालांकि 'रिटर्न' के बिना यह 'अगली' कॉल कर सकता है लेकिन फिर रीडायरेक्ट करने का प्रयास करता है। – ste2425

उत्तर

1

फ़ंक्शन से बाहर निकलने के लिए return को प्रीपेड करने का एक सम्मेलन है। वैकल्पिक if के बजाय if-else if-else का उपयोग करना होगा। इस मामले में आप केवल फ़ंक्शन से बाहर निकलना चाहते हैं और अपनी मिडलवेयर श्रृंखला पर आगे बढ़ना चाहते हैं।

आप अक्सर इस पैटर्न को देखेंगे। उदाहरण के लिए, यह बहुत आम है:

someFunction(function(err, result) { 
    if (err) { 
     console.error(err); 
    } else { 
     console.log(result); 
    } 
}); 

पहले पैटर्न भी गलती से next() बुला दो बार या इससे भी अधिक समय से आप रखता है:

someFunction(function(err, result) { 
    if (err) { 
     return console.error(err); 
    } 

    console.log(result); 
}); 

यह कम नेस्टिंग है और पढ़ता है इस की तुलना में सबसे poeple के लिए आसान अगर आपको if-else -logic में कुछ त्रुटि है। और यह ठीक है कि आपने पोस्ट किए गए मामले में next() के साथ ऐसा नहीं होना चाहिए। यह next() पर कॉल कर सकता है और फिर भी किसी भी मामले में रीडायरेक्ट का कारण बन सकता है।

+0

क्या यह सवाल का जवाब है? मुझे पता है कि अगला() करता है लेकिन अगला क्यों लौटता है(), यह मेरा प्रश्न है –

+0

वही है जो मैं अपने उत्तर में समझा रहा हूं, हां। आगे की कॉल से बचने के लिए उस बिंदु पर विधि से बाहर निकलना है। यह एक पैटर्न है। इसका वास्तव में 'अगले()' के साथ कुछ लेना देना नहीं है। यह ज्यादातर इसलिए है क्योंकि _callback hell_ की प्रकृति। –

संबंधित मुद्दे