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


у меня есть маршрут, на моей Экспресс-приложение, которое выглядит так:

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

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

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

  1. использовать этот маршрут только в том случае, если ID-это число, и
  2. только если нет маршрута для этого конкретного параметра, уже определенного (например, столкновение с /login).

может это будет сделано?

3 58

3 ответа:

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

app.get('/:id(\d+)/', function (req, res){
  // req.params.id is now defined here for you
});

да, проверьте 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];
  ...
});

Вы можете использовать:

// /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
});