带有参数的快速路线,然后是没有参数的路线

时间:2018-03-08 15:54:46

标签: node.js express

我在以下结构上有2条路线:

router.get( '/人/:ID')

router.get( '/人/朋友')

请求: GET / person / 1 正由第一条路线按我编写的顺序处理。

这个顺序:

router.get( '/人/:ID')

router.get( '/人/朋友')

将转到'/ person /:id

而这一个:

router.get( '/人/朋友')

router.get( '/人/:ID')

将转到'/ person / friends'

我使用params的格式错了吗?不是:id 意味着它需要一个变量,而/ friends期望相同的字符串是“朋友”吗?

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来过滤路径,例如

app.get("^/person/:id([0-9]{1,6})", function(req, res, next){
    console.log('/person/:id endpoint hit: id: ' + req.params.id);
    res.end('OK');
});

app.get("/person/friends", function(req, res, next){
    console.log('/person/friends endpoint hit');
    res.end('OK');
});

这意味着任何请求,例如:http://localhost:3000/person/42将转到:/ id处理程序,而像http://localhost:3000/person/friends这样的请求将转到/ friends处理程序。您可以根据需要更改正则表达式,我假设ID为1到6位数字。

您可以通过执行以下操作来允许任何数量的数字更加宽松:

app.get("^/person/:id([0-9]+)", function(req, res, next){
    console.log('/person/:id endpoint hit: id: ' + req.params.id);
    res.end('OK');
});

如果您没有指定正则表达式模式,请求/个人/朋友将匹配/ person /:id处理程序,您将在日志中获取此信息:

/person/:id endpoint hit: id: friends