2013-06-15 10 views
25

वहाँएक्सप्रेस मिडलवेयर: app.use और app.all

app.use('/some/path', function(req, res, next() {})

और

app.all('/some/path', function(req, res, next() {})

वे दोनों मिडलवेयर कार्यों कि/कुछ/पथ के लिए बुलाया मिलता है के बीच एक अंतर है केवल अनुरोध, सही?

+1

http://stackoverflow.com/questions/14125997/difference-between-app-all-and-app-use –

उत्तर

22

इन दो उदाहरणों के उपयोग के बीच बड़ा अंतर है। app.use के साथ पंजीकृत फ़ंक्शंस सामान्य मिडलवेयर फ़ंक्शन हैं और मिडलवेयर स्टैक पर उनकी स्थिति के लिए उपयुक्त कहा जाता है, आमतौर पर app.configure फ़ंक्शन के अंदर। त्रुटि प्रबंधन कार्यों के अपवाद के साथ इस प्रकार के मिडलवेयर आमतौर पर app.route से पहले रखा जाता है।

दूसरी ओर app.all पर एक मार्ग समारोह (नहीं आमतौर पर मिडलवेयर कहा जाता है) जो सभी HTTP तरीकों को शामिल किया गया और केवल app.route अंदर कहा जाता है। यदि आपका पिछला राउटर फ़ंक्शन /some/path से मेल खाता है और next कॉलबैक को कॉल नहीं किया गया है, तो app.all निष्पादित नहीं किया जाएगा, इसलिए app.all फ़ंक्शन आमतौर पर आपके रूटिंग ब्लॉक की शुरुआत में होते हैं।

तीसरे प्रकार के मिडलवेयर भी हैं, जो आपके रूटिंग कार्यों में उपयोग किए जाते हैं, उदाहरण के लिए।

app.get('/some/path', middleware1, middleware2, function(req, res, next) {}); 

जो typicaly पहुंच को सीमित करने या /some/path मार्ग से संबंधित सामान्य कार्य करने के लिए प्रयोग किया जाता है।

व्यावहारिक अनुप्रयोग के लिए आप दोनों कार्यों का उपयोग कर सकते हैं, लेकिन app.use/some/path के साथ व्यवहार करते समय व्यवहार में अंतर से सावधान रहें। app.get के विपरीत, app.use अज्ञात फ़ंक्शन का आह्वान करने से पहले मार्ग से /some/path स्ट्रिप्स।

आप express के दस्तावेज़ीकरण में और अधिक पा सकते हैं।

+0

का डुप्लिकेट धन्यवाद! महान स्पष्टीकरण। – jamiltz

+0

@jamiltz - कृपया इसे उत्तर के रूप में चिह्नित करें। –

+5

यह एक्सप्रेस 3 के लिए सच है, लेकिन एक्सप्रेस 4 इसे थोड़ा अलग तरीके से संभालता है, और वे अब करीब हैं। –

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