एक्सप्रेस में app.use () और राऊटर (use) के बीच अंतर


92

मैं सिर्फ एक्सप्रेस पर प्रलेखन पढ़ रहा था और इन दो शब्दों को पाया, app.use();औरrouter.use();

मुझे पता app.use();है कि एक मार्ग पर एक मिडलवेयर माउंट करने के लिए नोड में उपयोग किया जाता है , और हम अक्सर इसका उपयोग अधिकांश नोड ऐप में करते हैं। लेकिन router.use();वे दोनों समान क्या हैं? यदि नहीं, तो अंतर क्या है?

मैंने यहां राउटर के बारे में पढ़ा । मुझे एसओ पर भी ऐसे ही सवाल मिले "एक्सप्रेस" राउटर और राउटिंग के बीच अंतर क्या है? और app.all ('*') और app.use ('/') के बीच अंतर है , लेकिन वे वास्तव में मेरे सवाल का जवाब नहीं देते हैं। धन्यवाद।

जवाबों:


126

router.getकेवल उपपथ को परिभाषित करने के लिए है। इस उदाहरण पर विचार करें:

var router = express.Router();

app.use('/first', router); // Mount the router as middleware at path /first

router.get('/sud', smaller);

router.get('/user', bigger);
  • यदि आप / पहले / sud खोलते हैं , तो smallerफ़ंक्शन को कॉल किया जाएगा।
  • यदि आप / पहला / उपयोगकर्ता खोलते हैं , तो biggerफ़ंक्शन को कॉल किया जाएगा।

संक्षेप में, app.use('/first', router)मिडिलवेयर को पथ पर / पहले माउंट करता है , फिर उसके router.getअनुसार उपपथ सेट करता है।


लेकिन अगर हम इसके बजाय निम्नलिखित का उपयोग करें:

app.use('/first', fun);

app.get('/sud', bigger);

app.get('/user', smaller);
  • यदि आप अपने ब्राउज़र में / पहली बार खोलते हैं, तो आपको funकॉल किया जाएगा,
  • के लिए / सूद , biggerकहा जाता हो जाएगा
  • के लिए / उपयोगकर्ता , smallerकहा जाता हो जाएगा

लेकिन याद रखें / पहले / सूद के लिए , कोई फ़ंक्शन नहीं कहा जाएगा।

यह लिंक भी मदद कर सकता है: http://expressjs.com/api.html#router


मैंने अपना उत्तर संपादित किया है @NaeemShaikh pls का एक दृष्टिकोण है।
सुधांशु गौर

4
लेकिन राउटर का उपयोग क्यों करें जब आप app.use ('/ first / sud', छोटा) जा सकते हैं; और app.use ('/ पहला / उपयोगकर्ता', बड़ा)? मेरा मतलब है कि उन्होंने राउटर बनाया इसलिए हमें पहले पैरामीटर में अतिरिक्त सामान टाइप करने की ज़रूरत नहीं है?
mskw

अच्छा सवाल यह है कि मैं इसे सही तरीके से नहीं जानता, लेकिन मुझे लगता है कि यह वह चीज है जो वास्तव में रूटिंग को urls पर डाइक करने के लिए बनाई गई थी, जहां app.use को मिडलवेयर के लिए बनाया गया है, अब आप useapp.use ('/ first / sud', छोटा) कर सकते हैं; लेकिन मान लीजिए कि आपके ऐप में आपके पास कई मार्ग हैं जो पहले / दूसरे / तीसरे / चौथे के रूप में शुरू करते हैं। अब आप यहाँ पर हर मार्ग को बनाएंगे / पहला / दूसरा / तीसरा / चौथा / x, नहीं, आप यहाँ राउटर का उपयोग करेंगे याद रखें कि दोनों महान काम करते हैं लेकिन राउटर सिर्फ इन उरोज उद्देश्यों के लिए बनाया गया था
सुधांशु गौड़

तो, इसका मतलब है कि हम नेस्टिंग का उपयोग नहीं कर सकते router। हम केवल द्वारा कर सकते हैं app। क्या वो सही है?
Mr_Perfect

1
ओपी के बारे में क्यों पूछता है, router.useलेकिन यह जवाब किसका जवाब देता है router.get?
टिम हेइलमैन

74

router.use();विशिष्ट राउटर द्वारा दिए गए मार्गों के लिए मिडवेयरवेयर को माउंट करता है, app.use();ऐप के सभी मार्गों (या यदि आप उपयोग करते हैं तो निर्दिष्ट मार्गों से मेल खाते हैं app.use('/ANYROUTESHERE', yourMiddleware());) के लिए मिडलवेयर को मापता है ।

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

आप केवल एपीआई राउटर के लिए प्रमाणीकरण मिडलवेयर माउंट करेंगे router.use(yourAuthMiddleware());

यदि आपके पास एक ऐप होगा, जिसके लिए सभी मार्गों के लिए एक वैध उपयोगकर्ता की आवश्यकता होती है, तो ऐप के लिए मिडलवेयर माउंट करें app.use(yourAuthMiddleware());


क्या मैं एक नया राउटर बना सकता हूं और फिर useदूसरे राउटर में? जैसेrouter1.use('/path', router2);
कोडीबस्टीन

6
यह उत्तर स्पष्ट है और स्वीकृत उत्तर होना चाहिए। राउटर का अक्सर दुरुपयोग किया जाता है जहां ऐप अधिक उपयुक्त होगा।
AturSams

1

app.use () निर्दिष्ट पथ पर मिडलवेयर फ़ंक्शन या फ़ंक्शंस को माउंट करने के लिए उपयोग किया जाता है, अनुरोध किए गए पथ के आधार से मेल खाता होने पर मिडलवेयर फ़ंक्शन को निष्पादित किया जाता है।

राउटर.यूज़ () का उपयोग मिडलवेयर फंक्शन या फंक्शन्स के लिए किया जाता है, डिफॉल्ट्स माउंट पथ को "/" तक ले जाते हैं।

लेकिन app.use () में आपको एक निर्दिष्ट रास्ता देना होगा:

 var adsRouter = require('./adsRouter.js');
    app.use('/ads', adsRouter);

या

app.use('/ads', function(req, res, next) {

  // write your callback code here.

    });

लेकिन राउटर.यूज़ () का उपयोग करते समय आप इस तरह केवल मिडलवेयर दे सकते हैं:

router.use(function(req, res, next) {
  console.log('%s %s %s', req.method, req.url, req.path);
  next();
});

या

router.use('/test', function(req, res, next) {
  // write your callback code here.
  next();
});

या

//in router.js

router.use('/admin', authUtil.verifySessionId, authUtil.verifyLisencee);
router.post('/admin', controllerIndex.ads.adListingAdmin);

उपरोक्त कोड में जब अंतिम बिंदु '/ व्यवस्थापक' होता है, तो सबसे पहले यह करेगा।


1
app.useयदि आप एप्लिकेशन को किए गए प्रत्येक अनुरोध के लिए फ़ंक्शन निष्पादित करना चाहते हैं, तो एक पथ प्रदान करने की आवश्यकता नहीं है ।
jacefarm

@ शुभम आपने बहुत अच्छा समझाया और यह मेरे लिए बहुत मददगार था। मिडलवेयर के साथ राउटर के मामले में हम इसे राउटर की तरह सिंगल लाइन में भी मर्ज कर सकते हैं। "(" /: id / डिलीट ", मिडलवेयर.चेकटोकन, userController.deleteUser)
सौरभ भूटानी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.