CNode

express的路由问题

问答
Zzhaoqize发布于9 年前最后回复9 年前9 回复6103 浏览0 收藏

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

在后:/api/:name

请求的url:localhost/api/cyeg

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

查看回复

回复 (9)

Z
zengming00#1·9 年前

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

W
wong2#2·9 年前

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

J
JustinLiao1314#3·9 年前

楼上正解 From Noder

N
nnliang#4·9 年前

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

O
ouyangxuanyun#5·9 年前

如果路由中有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 ' );
});

W
webbought#6·9 年前

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

Y
yulipu#7·9 年前

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

J
jinzhuming#8·9 年前

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

S
solarhell#9·9 年前

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

参与回复
登录后即可参与回复。登录