两个路由规则: 在前:/api/:id
在后:/api/:name
请求的url:localhost/api/cyeg
请问这样的话会进入哪个路由呢?
你把这当成工厂里面的流水线生产看就很好理解了,一个路由处理完后交给下一个路由。 但是要注意,前面的路由必需调用next()(路由处理回调定义成function(req, res, next)),否则第一个路由就是最终的路由
楼主应该是希望只走其中一个吧
楼上正解 From Noder
如果楼主只想走其中一个,改路由吧
如果路由中有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}'