Чтобы полностью понять это, пожалуйста, прочитайте документацию: http://expressjs.com/api.html#router.METHOD
Как Экспресс Маршруты Capture Дорожки
При использовании :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
Это ударит по всем трем, но контекст для каждого другого.
Как захватить шаблоны путей с использованием регулярных выражений
Если вы хотите, чтобы захватить отдельные маршруты для ид (скажем, все номера) и имя пользователя (все буквы), вы можете сделать это:
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.
первый маршрут ... – Alon
почему первый маршрут? – NathanSuzuki
маршруты в экспресс-работе с первого матча, в зависимости от заказа, в который они загружены. – oznu