MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

एक्सप्रेस कैसे जानता है कि एकाधिक पथ मेल खाने पर किस राउटर पथ का उपयोग करना है?

इसे पूरी तरह से समझने के लिए, कृपया दस्तावेज़ पढ़ें:http://expressjs.com/api.html #रूटर.विधि

एक्सप्रेस रूट कैसे पथ कैप्चर करते हैं

जब आप :param . का उपयोग करते हैं आपके पथ के एक भाग के रूप में, यह /* . जैसी हर चीज़ से मेल खाता है , और कैप्चर किया गया मान req.params.param . में संग्रहीत होता है ।

जब आपके पास एक से अधिक नियम होते हैं, तो पहला पंजीकृत नियम वह होता है जिसके विरुद्ध जाँच की जाती है। यह एक मैच मिलने तक प्रत्येक नियम के खिलाफ प्रत्येक कॉल की जांच करता है। अगर आप next() . पर कॉल करते हैं इसके पास कोई मान नहीं होने के कारण, यह अगले मैच की तलाश करेगा (या तो उसी मार्ग में, या अगले मिडलवेयर में जारी रहेगा)।

तो ये तीन नियम सभी चलेंगे

var handleRoute = function(req, res, next){
   console.log(req.path + ' ' + req.params.id + ' ' + req.params.user + ' ' + req.params[0]);
   next();
}

route.route('/user/:id').get(handleRoute);
route.route('/user/:user').get(handleRoute);
route.route('/user/*').get(handleRoute);

जब मैं /user/foobar . का अनुरोध करता हूं , मुझे निम्न आउटपुट दिखाई देगा (और शायद क्लाइंट के रूप में एक त्रुटि क्योंकि मैंने कभी जवाब नहीं दिया:पी)

/user/foobar foobar undefined undefined
/user/foobar undefined foobar undefined
/user/foobar undefined undefined foobar

यह तीनों को प्रभावित करेगा, लेकिन संदर्भ प्रत्येक के लिए अलग है।

रेगुलर एक्सप्रेशन के साथ पथ पैटर्न कैप्चर कैसे करें

यदि आप आईडी (मान लें सभी नंबर) और उपयोगकर्ता नाम (सभी अक्षर) के लिए अलग रूट कैप्चर करना चाहते हैं, तो आप यह कर सकते हैं:

var handleRoute = function(tag) {
  return function(req, res, next) {
    console.log(tag + ' ' + req.path + ' -> ' + req.params[0]);
    res.status(200)
      .json({
        success: 'yay!'
      });
  };
};

route.route(/^\/user\/([0-9]+)$/i)
  .get(handleRoute('id'));
route.route(/^\user\/([A-Za-z]+)$/i)
  .get(handleRoute('user'));
route.route('/user/*')
  .get(handleRoute('catch all'));

मेरे कैप्चर ग्रुप के चारों ओर पैराथीसिस पर ध्यान दें। इसके बिना params खाली है। यह केवल * . के साथ स्वतः कैप्चर करता है स्ट्रिंग में क्योंकि वे अच्छे लोग हैं। जब मैं तीन अलग-अलग प्रकारों के खिलाफ दौड़ता हूं तो मुझे आउटपुट के लिए निम्नलिखित मिलेगा।

id /user/123 -> 123
user /user/user -> user
catch all /user/user.1 -> user.1

जो कुछ भी समझाया गया है, आप अपने सिस्टम को संक्रमित करने के लिए बग के लिए कुछ वैक्टर के लिए खुद को खोल रहे हैं। शायद आप अपने यूआरएल पैटर्न के बारे में सोचना चाहें।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoimport --jsonArray . पर उप-दस्तावेजों पर _id बनाएं

  2. मोंगोडब विंडोज़ पर शुरू नहीं हो सकता है?

  3. mongodb php ड्राइवर को अनइंस्टॉल करें और एक अलग संस्करण स्थापित करें

  4. geoNear गलत दूरी लौटाता है

  5. क्या मोंगोडब में हैश अनुक्रमित कुंजी के हैश की एक श्रृंखला के लिए पूछना संभव है?