Conditions des paramètres des routes Express

J'ai un itinéraire sur mon application Express qui ressemble à ceci:

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

L'ID sera toujours un nombre. Cependant, pour le moment, cette route correspond à d'autres choses, telles que /login.

Je pense que je veux deux choses de ceci:

  1. pour utiliser cette route uniquement si L'ID est un nombre, et
  2. seulement s'il n'y a pas de route pour ce paramètre spécifique déjà défini (comme le choc avec /login).

Cela Peut-il être fait?

58
demandé sur nbro 2012-06-29 12:26:21

3 réponses

En développant la réponse de Marius, vous pouvez fournir l'expression rationnelle et le nom du paramètre:

app.get('/:id(\\d+)/', function (req, res){
  // req.params.id is now defined here for you
});
115
répondu danmactough 2013-04-12 14:31:11

Oui, découvrez http://expressjs.com/guide/routing.html et https://www.npmjs.com/package/path-to-regexp (qui expriment les usages). Une version non testée qui peut fonctionner est:

app.get(/^(\d+)$/, function (request, response) {
  var id = request.params[0];
  ...
});
11
répondu Marius Kjeldahl 2015-11-14 19:23:20

Vous pouvez utiliser:

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

Ou ceci:

// /post/12345
app.get(/\/post\/([^\/]+)\/?/, function(req, res){
  var id = req.params[0];
  // do something
});
2
répondu Marco Godínez 2012-12-29 07:23:26