Условия параметров экспресс-маршрутов

У меня есть маршрут в моем приложении Express, который выглядит следующим образом:

app.get('/:id', function (request, response) {
  …
});

Идентификатор всегда будет номером. Однако на данный момент этот маршрут соответствует другим вещам, таким как/login.

Я думаю, что хочу две вещи из этого:

to only use this route if the ID is a number, and only if there isn't a route for that specific paramater already defined (such as the clash with /login).

Можно ли это сделать?

Ответы на вопрос(3)

// /12345
app.get(/\/([^\/]+)\/?/, function(req, res){
  var id = req.params[0];
  // do something
});

или это:

// /post/12345
app.get(/\/post\/([^\/]+)\/?/, function(req, res){
  var id = req.params[0];
  // do something
});
Решение Вопроса

вы можете указать регулярное выражение И имя параметра:

app.get('/:id(\\d+)/', function (req, res){
  // req.params.id is now defined here for you
});
 29 июн. 2012 г., 12:56
Отлично, но теперь, если у меня есть способ сказать/1 в другом месте это все еще будет называться так. В любом случае, чтобы предотвратить это?
 18 апр. 2013 г., 02:07
Упорядочить обработчики маршрутов в порядке приоритета, а затем использоватьfunction(req, res, next)вызывая next () из любого маршрута, когда ваша логика знает, что ей нужно передать управление следующему обработчику маршрута в строке.
 02 нояб. 2015 г., 00:47
если вы используете буквенно-цифровой идентификатор, такой как Mongo ObjectID, вам нужно изменить регулярное выражение
 29 июн. 2012 г., 13:18
Пока явное/1 Сначала добавляется маршрут, он будет иметь приоритет.
 29 июн. 2012 г., 16:51
Вы можете разместить явные маршруты первыми, как говорит JohnnyHK. Вы также можете указать, что RegEx не соответствует маршрутам, которые вы хотите пропустить.

http://expressjs.com/guide/routing.html а такжеhttps://www.npmjs.com/package/path-to-regexp (какие экспресс-использования). Непроверенная версия, которая может работать:

app.get(/^(\d+)$/, function (request, response) {
  var id = request.params[0];
  ...
});

Ваш ответ на вопрос