Express调用next('route')跳转后路由参数返回undefined问题排查
问题原因说明
你访问/user/lai时未触发next('route'),调用无参数的next()只会执行当前路由的下一个处理函数,沿用第一个路由定义的参数名:uid,所以取值正常。
访问/user/lai9fox时出现undefined是两个因素共同导致的:
- 第一,
next('route')的生效逻辑:Express中调用next('route')时,会终止当前路由的所有后续处理函数执行,转而匹配后续注册的、路径规则符合当前请求的其他路由。你访问/user/lai9fox时命中了第一个路由的判断逻辑,触发next('route'),所以执行权会落到第二个/user/:id的路由处理函数中。 - 第二,路由参数命名不匹配:第二个路由的路径参数你定义的是
:id,Express会将路径中对应位置的值存入req.params.id,你在第二个路由的响应逻辑里取的是不存在的req.params.uid,自然返回undefined。
修复方案
两种方案任选其一即可:
- 统一两个路由的参数命名,将第二个路由的参数名改为
:uid:
app.get('/user/:uid', (req, res, next) => { res.send(`<h1>Welcome you, ${req.params.uid} !</h1>`) })
- 保持第二个路由参数名
:id不变,调整取值逻辑取req.params.id:
app.get('/user/:id', (req, res, next) => { res.send(`<h1>Welcome you, ${req.params.id} !</h1>`) })
内容的提问来源于stack exchange,提问作者lai9fox
相关产品推荐
相关产品推荐

