web-dev-qa-db-fra.com

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 j'en veux deux choses:

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

Cela peut-il être fait?

64
user1082754

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

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

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

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

Vous pouvez utiliser:

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

ou ca:

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