Express路由路径参数丢失:req.params为空如何排查?
问题分析与解决办法
你遇到的问题是因为Express Router默认不会合并父路由的URL参数到子路由的req.params中,具体解决步骤如下:
- 定义
userRoutes时,必须启用mergeParams: true选项,修改后的代码如下:
const express = require('express'); // 关键:创建Router实例时添加mergeParams配置 const userRoutes = express.Router({ mergeParams: true }); userRoutes.get("/", userController.getStuff); module.exports = userRoutes;
- 这样修改后,子路由里的中间件和控制器就能正常获取到
req.params.phone了,不管请求中的+号是否做了URL编码(编码后为%2B),参数都能被正确解析。
原因说明
Express的Router实例默认会维护独立的req.params对象,父路由(也就是app.use("/api/:phone/stuff", userRoutes)里的:phone)的参数不会自动传递给子路由。开启mergeParams: true后,Router会把父路由的参数合并到当前的req.params中,这样你就能在子路由的中间件和控制器里访问到这些参数了。
内容的提问来源于stack exchange,提问作者Amos
相关产品推荐
相关产品推荐

