两个路由规则: 在前:/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匹配。
:/api/:id
:/api/:name
next()
/api/*
/api/:id
使用正则 id 限制为数字 name限制为字符串
第一个…然后就停止了。路由都是匹配符合的第一个规则
会进去:id 可以这样限定 :id 为int值,这样写 :id(\\d+) 或者 '/:id([0-9])' 甚至可以这样限定位数 '/:id([0-9]{3,8}'
:id(\\d+)
'/:id([0-9])'
'/:id([0-9]{3,8}'
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
你把这当成工厂里面的流水线生产看就很好理解了,一个路由处理完后交给下一个路由。 但是要注意,前面的路由必需调用next()(路由处理回调定义成function(req, res, next)),否则第一个路由就是最终的路由
楼主应该是希望只走其中一个吧
楼上正解 From Noder
如果楼主只想走其中一个,改路由吧
如果路由中有next的话会按照你写的路由先后依次进入符合的路由, 如果题主想要区分这两个路由可以再添加一个字段例如/api/id/:id, /api/name/:name
会优先被
:/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}'