71

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

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

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

我想我想要两件事:

  1. 仅当 ID 是数字时才使用此路由,并且
  2. 仅当没有已定义该特定参数的路线时(例如与 冲突/login)。

这可以做到吗?

4

3 回答 3

139

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

app.get('/:id(\\d+)/', function (req, res){
  // req.params.id is now defined here for you
});
于 2012-06-29T10:45:36.983 回答
12

是的,请查看http://expressjs.com/guide/routing.htmlhttps://www.npmjs.com/package/path-to-regexp(快递使用)。可能工作的未经测试的版本是:

app.get(/^(\d+)$/, function (request, response) {
  var id = request.params[0];
  ...
});
于 2012-06-29T08:34:49.027 回答
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
});
于 2012-12-29T07:23:26.130 回答