如何在Express Router中从请求对象获取路由路径?
从Express Route对象获取原始路由路径的解决办法
你遇到的问题是:明明控制台打印Route对象时能看到path: '/history/:id',但直接用route.path或route.get('path')却拿不到对应路径。试试下面几种可行方案:
- 尝试访问私有属性
route._path:部分Express版本中,路由的原始路径会被存储在这个私有属性中 - 从Route的
stack数组提取:Route的stack里的Layer对象包含路由路径信息,直接取第一个Layer的path即可,比如route.stack[0].path(适用于单路径绑定的路由) - 兜底遍历拼接:如果路由包含多层嵌套,可以遍历
stack里的所有Layer,拼接出完整路径(对于/history/:id这种简单路由,前两种方案足够)
示例代码:
let targetPath = ''; // 优先尝试直接读取 if (route.path) { targetPath = route.path; } // 不行就试私有属性 else if (route._path) { targetPath = route._path; } // 最后从stack中提取 else if (route.stack?.length) { targetPath = route.stack[0].path; } console.log(targetPath); // 输出 /history/:id
原因说明
Express不同版本对Route对象的属性暴露策略有差异:部分版本会把路由路径作为path直接暴露,有些则封装为_path私有属性。另外如果你的route对象是经过第三方中间件封装后的实例,也可能导致直接访问path失效。
内容的提问来源于stack exchange,提问作者Ashwani Panwar
相关产品推荐
相关产品推荐

