快递路线参数条件

时间:2012-06-29 08:26:22

标签: node.js express routing url-routing

我的Express应用程序上有一条如下所示的路线:

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

ID始终是一个数字。但是,目前这条路线与其他东西相匹配,例如/login

我想我想要两件事:

  1. 仅在ID为数字且
  2. 时才使用此路线
  3. 仅当没有已定义的特定参数的路线时(例如与/login的冲突)。
  4. 可以这样做吗?

3 个答案:

答案 0 :(得分:122)

扩展Marius的答案,你可以提供正则表达式和参数名称:

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

答案 1 :(得分:11)

是的,请查看http://expressjs.com/guide/routing.htmlhttps://www.npmjs.com/package/path-to-regexp(表达用途)。可能有效的未经测试的版本是:

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

答案 2 :(得分: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
});