我有一个Express应用程序的路由如下:
app.get('/:id', function (request, response) {
…
});
这个ID将始终是一个数字。 然而,目前这条路由正在匹配其他内容,比如/login
。
我认为我想从中获得两件事:
- 仅在ID为数字时使用此路由,以及
- 只有在没有为该特定参数定义路由时才使用(例如与
/login
的冲突)。
能做到吗?
我有一个Express应用程序的路由如下:
app.get('/:id', function (request, response) {
…
});
这个ID将始终是一个数字。 然而,目前这条路由正在匹配其他内容,比如/login
。
我认为我想从中获得两件事:
/login
的冲突)。能做到吗?
在 Marius 的回答基础上,你可以同时提供正则表达式和参数名称:
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(express使用的)。 一个未经测试的可能有效的版本如下:
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
});
/1
,它仍然会调用那个路由器。有什么方法可以防止这种情况发生吗? - user1082754