MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как Express знае кой път на рутера да използва, когато съвпадат няколко пътя?

За да разберете напълно това, моля, прочетете документацията:http://expressjs.com/api.html #router.METHOD

Как Express Routes улавят пътища

Когато използвате :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 , ще видя следния резултат (и вероятно грешка като клиент, защото така и не отговорих :P)

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

Ще удари и трите, но контекстът е различен за всеки.

Как да заснемате шаблони на пътища с регулярни изрази

Ако искате да заснемете отделни маршрути за id (да кажем всички числа) и потребителско име (всички букви), можете да направите това:

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

Всичко това обяснено, вие се отваряте към някои вектори за грешки, които да заразят вашата система. Може да искате да помислите върху вашия URL модел.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. използване на akka потоци за преминаване през колекцията на mongo

  2. Поточно предаване на резултати от заявка с родния mongoDB драйвер за възел

  3. Резултат от заявка от mongoose с помощта на динамичен model.find

  4. Spring Data MongoDB – индекси, анотации и конвертори

  5. Преобразувайте MongoDB заявка в Java