Mặc định mỗi express.Router() có không gian req.params riêng, chỉ chứa param khai báo trong chính router đó.
Param của router cha (:userId) không được truyền xuống, nên router con đọc ra undefined.
js
const app = express()
const posts = express.Router()
posts.get('/', (req, res) => {
res.json({ userId: req.params.userId }) // undefined
})
app.use('/users/:userId/posts', posts)Sửa: bật mergeParams khi tạo router con:
js
const posts = express.Router({ mergeParams: true })Khi bật, req.params của router con được gộp với param của router cha. Nếu trùng tên, giá trị của router con thắng — đây là bẫy thật khi cả hai cấp cùng dùng :id; đặt tên khác nhau (:userId / :postId) để tránh.
Cùng nhóm với option này còn caseSensitive và strict — cả ba đều là option của express.Router([options]) và chỉ áp dụng cho router được tạo ra, không kế thừa từ app.