You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express嵌套路由中slug参数无法传递至子router的问题求助

解决Express嵌套路由中req.params为空的问题

我在Express里把categoryRouter挂载到带参数的父路由路径/:productId/category下,但子路由里的req.params始终是空对象,拿不到父路由的productId参数。

示例代码如下:

index.js

const express = require('express');
const productsRouter = require('./products-router');

const app = express();
const port = 3000;

const apiRouter = express.Router();
apiRouter.use('/products', productsRouter);

app.use('/api', apiRouter);

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`);
});

products-router.js

const express = require('express');
const categoryRouter = require('./category-router');

const productsRouter = express.Router();
productsRouter.get('/', (req, res) => {
    res.send('[GET] - Products root!');
});

productsRouter.use('/:productId/category', categoryRouter);

module.exports = productsRouter;

category-router.js(原问题版本)

const express = require('express');

const categoryRouter = express.Router();
categoryRouter.get('/', (req, res) => {
    console.log(req.params); // 输出 {}
    res.send('[GET] - categoryRouter root!');
});

categoryRouter.post('/', (req, res) => {
    console.log(req.params); // 输出 {}
    res.send('[POST] - categoryRouter root!');
});

module.exports = categoryRouter;

解决方案

问题出在Express的子路由默认不会合并父路由的URL参数,只要在创建子路由时添加mergeParams: true配置即可解决:

修改category-router.js:

const express = require('express');

// 启用mergeParams,让子路由能访问父路由的参数
const categoryRouter = express.Router({ mergeParams: true });

categoryRouter.get('/', (req, res) => {
    console.log(req.params); // 现在会输出 { productId: '传入的参数值' }
    res.send('[GET] - categoryRouter root!');
});

categoryRouter.post('/', (req, res) => {
    console.log(req.params); // 现在会输出 { productId: '传入的参数值' }
    res.send('[POST] - categoryRouter root!');
});

module.exports = categoryRouter;

启用这个配置后,父路由里定义的productId参数会被合并到子路由的req.params对象中,子路由就能正常获取到该参数了。

内容的提问来源于stack exchange,提问作者Cache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:15:08