如何在Express中解析URL参数id?路由req.params无法打印求助
解决Express中无法获取URL参数的问题
嘿,我立马就发现问题所在啦!咱们一步步来捋清楚:
核心问题:路由定义和请求格式不匹配
你写的路由是**路径参数(Route Parameter)**模式:
router.get('/matches/:id', checkJWT, (req, res, next) => { console.log('req.params ', req.params); });
但从你的请求日志能看到,实际发送的请求用的是**查询参数(Query Parameter)**格式:
GET /api/accounts/matches?id=5d693ba93aae6a6caa6c3cda
这两种参数模式完全是两回事,所以你的/matches/:id路由根本没被触发,回调函数里的console.log自然不会执行啦!
两种解决方案任你选
方案1:继续使用路径参数(推荐RESTful风格)
如果想保持路由的RESTful设计,只需要调整前端的请求URL:
把原来的/api/accounts/matches?id=xxx改成/api/accounts/matches/5d693ba93aae6a6caa6c3cda(把id值直接放在路径里)。
这样你的现有路由代码不用改,就能通过req.params.id拿到对应的值,控制台也会正常打印req.params啦。
方案2:改用查询参数接收
如果想保留?id=xxx的请求格式,需要修改你的路由定义(去掉路径里的:id):
router.get('/matches', checkJWT, (req, res, next) => { console.log('req.query ', req.query); // 用 req.query.id 就能拿到具体的ID值 });
之后发送/api/accounts/matches?id=xxx请求,就能在控制台看到req.query里的id参数了。
补充说明
从你的请求日志来看,所有请求都命中了/matches路径(不带:id的版本),所以你的带:id的路由完全没被调用,这就是为什么你看不到控制台输出的原因~
内容的提问来源于stack exchange,提问作者kittu
相关产品推荐
相关产品推荐

