express的路由问题
发布于 8 年前 作者 zhaoqize 4934 次浏览 来自 问答

两个路由规则: 在前:/api/:id

在后:/api/:name

请求的url:localhost/api/cyeg

请问这样的话会进入哪个路由呢?

9 回复

你把这当成工厂里面的流水线生产看就很好理解了,一个路由处理完后交给下一个路由。 但是要注意,前面的路由必需调用next()(路由处理回调定义成function(req, res, next)),否则第一个路由就是最终的路由

楼主应该是希望只走其中一个吧

如果楼主只想走其中一个,改路由吧

如果路由中有next的话会按照你写的路由先后依次进入符合的路由, 如果题主想要区分这两个路由可以再添加一个字段例如/api/id/:id, /api/name/:name

app.get(’/api/:id’,function(req, res, next){
… … next(); // 将控制转向下一个符合URL的路由
});
app.get(’/api/:name’, function(req, res){
… … res.send('XXX ’ );
});

会优先被:/api/:id匹配。 如果希望进入:/api/:id的处理逻辑后再进入 :/api/:name,可以在 :/api/:id的逻辑中的最后使用next()转移控制权给一个匹配的路由控制器。 但如果仅仅是希望进入 :/api/:name, 那么就失败了,因为url的设计上是有问题的,因为符合/api/*格式的url都会被/api/:id匹配。

使用正则 id 限制为数字 name限制为字符串

第一个…然后就停止了。路由都是匹配符合的第一个规则

会进去:id 可以这样限定 :id 为int值,这样写 :id(\\d+) 或者 '/:id([0-9])' 甚至可以这样限定位数 '/:id([0-9]{3,8}'

回到顶部