javascript - Strange express.use() behavior in NodeJS -


 <कोड> app.use (समारोह (अनुरोध, रेस, अगले) {console.log ( 'मिडलवेयर मार डाला'); आगामी(); }); App.get ('/ 1', फ़ंक्शन (रीक, रिज़) {console.log ('/ 1'); res.end ();}); App.get ('/ 2', फ़ंक्शन (रिक, रेस) {console.log ('/ 2'); res.end ();}); ...  

यह काम करता है Middleware दोनों / 1 और / 2 अनुरोध पर निष्पादित

अब मैं चाहता हूँ मिडलवेयर अनुरोध पेज / 1 पर नहीं निष्पादित किया जाना है, लेकिन नीचे सभी पृष्ठों पर:।

  अनुप्रयोग। प्राप्त करें ('/ 1', फ़ंक्शन (रिक, रेस) {console.log ('/ 1'); res.end ();}); App.use (function (req, res, next) {console.log ('मिडलवेयर निष्पादित'); अगला ();}); App.get ('/ 2', फ़ंक्शन (रिक, रेस) {console.log ('/ 2'); res.end ();}); ...  

इस मामले में मिडलवेयर निष्पादित नहीं करेगा। अनुरोध पृष्ठ / 2 पर भी क्या गलत है? इस को हल करने के लिए कैसे?

कारण है कि एक बार आप एक मार्ग, व्यक्त करेंगे की घोषणा (हुड के नीचे ) मिडलवेयर श्रृंखला में राउटर मिडलवेयर डालें। इसका मतलब यह है कि किसी भी आने वाले अनुरोधों रूटर द्वारा नियंत्रित किया जाएगा और (शायद) किसी भी मिडलवेयर रूटर / मार्ग के बाद घोषित करने के लिए पारित कर दिया नहीं किया जाएगा।

@ मार्ग घोषणा में मिडलवेयर सहित jgitter के सुझाव काम करेंगे बस ठीक।

एक और विकल्प app.all का उपयोग करने के बजाय ऐप। उपयोग :

  app.get (' / 1 ', फ़ंक्शन (रिक, रेस) {console.log (' / 1 '); res.end ();}); App.all ('*', फ़ंक्शन (रिक, रेस, अगली) {console.log ('मिडलेवेयर निष्पादित'); अगला ();}); App.get ('/ 2', फ़ंक्शन (रिक, रेस) {console.log ('/ 2'); res.end ();});  

Comments