行业资讯

2 个技巧玩转 micro-router 路由参数:req.params 与 req.query 解析完全指南

发布时间:2026/8/26 14:59:29
2 个技巧玩转 micro-router 路由参数:req.params 与 req.query 解析完全指南 2 个技巧玩转 micro-router 路由参数req.params 与 req.query 解析完全指南【免费下载链接】micro-router:station: A tiny and functional router for Zeits Micro项目地址: https://gitcode.com/gh_mirrors/mi/micro-routermicro-routernpm 包名microrouter是一个专为 ZEIT 的Micro框架打造的微型功能路由库——只用几行代码就能以函数式风格定义 HTTP 路由并原生支持async/await。这篇文章带你用2 个核心技巧彻底玩转 micro-router 路由参数用req.params提取 URL 路径参数、用req.query解析查询字符串从此告别参数到底在哪的困惑 快速上手1 行命令安装 micro-routermicro-router 的依赖极简核心只用了url-pattern一个包来做路径匹配见 package.json。安装方式如下yarn add microrouter如果你还想阅读或修改它的源码可以克隆仓库到本地git clone https://gitcode.com/gh_mirrors/mi/micro-router 它支持get、post、put、patch、del、head、options全部 7 种 HTTP 方法每个路由就是一个(req, res) {}的函数简单直接。技巧一用 req.params 提取 URL 路径参数路径参数是 RESTful API 的灵魂比如/hello/:who中的:who。micro-router 使用:记法定义路径变量请求命中后这些变量会被自动收集成一个对象挂在req.params上。const { router, get } require(microrouter) module.exports router( get(/hello/:who, (req, res) req.params) )请求GET /hello/World时req.params的值就是{ who: World }几个必须知道的细节要点说明变量命名支持字母、数字、-、_在 src/utils/index.js 的segmentNameCharset中定义变量取值支持字母、数字及 . - _等特殊字符因此/user/:id匹配1或abcx.com都没问题匹配引擎底层由url-pattern驱动还支持用new UrlPattern(/正则/)做高级匹配也就是说你在路径里声明了几个:变量req.params里就有几个键一一对应非常可预测 技巧二用 req.query 解析查询字符串如果说req.params管的是路径段那req.query管的就是 URL 里?后面的部分。micro-router 会自动解析查询字符串无需你手动处理module.exports router( get(/user, (req, res) req.query) )请求GET /user?id1时req.query的值就是{ id: 1 }查询参数不需要提前声明URL 里带了什么req.query里就有什么——这让搜索、过滤、分页这类动态参数变得特别轻松。 一张表搞懂req.params vs req.query对比项req.paramsreq.query来源路径中的:变量段URL 中?keyvalue部分是否需声明✅ 必须在路径里用:定义❌ 动态读取无需声明典型场景资源 ID、路径层级如/user/:id搜索条件、分页页码、筛选开关请求示例/hello/World→{ who: World }/user?id1→{ id: 1 }常见误解?whox不会进入 params路径段World不会进入 query记住这句话路径归 params问号归 query两边互不串门✌️⚡ 进阶玩法参数组合与路由优先级1. 同时使用两种参数官方测试文件 src/lib/index.test.js 里就有一个经典组合案例路由/hello/:msg收到请求/hello/world?timenow处理函数可以同时拿到const hello req Hello ${req.params.msg} ${req.query.time} // 输出Hello world now一个请求里路径参数负责定位资源查询参数负责附加条件各司其职。2. 路由按顺序匹配先命中先生效router内部会按你传入的顺序依次尝试匹配实现见 src/lib/index.js 中的findRoute一旦某个处理函数返回了结果后续路由就不再执行。所以建议把具体路由写在前面通配路由/*放在最后作为兜底如 404 处理。3. 别忘了请求体需要手动解析micro-router 本身不解析任何请求体它只负责路径匹配。如果你要处理POST的 JSON body搭配 Micro 自带的json辅助函数即可const body await json(req)4. 版本化 API 就用 withNamespace当你的 API 需要多版本时withNamespace高阶函数可以一键给一组路由加上前缀const oldApi withNamespace(/api/v1) const newApi withNamespace(/api/v2)这样/api/v1/user/:id和/api/v2/user/:id各管各的req.params照常工作管理起来清爽又省心 ️ 想看源码核心文件都在这文件作用src/lib/index.js路由注册与分发7 种 HTTP 方法都出自这里src/utils/index.jsgetParamsAndQueryreq.params与req.query的解析核心src/lib/index.test.js完整测试用例是学习各种用法最好的活文档readme.md官方使用文档含 Namespaced Routes 等进阶章节 小结req.params路径:变量的集合记得先声明再使用req.query?后查询串的集合随用随取两者互不干扰可自由组合覆盖 90% 的路由参数场景路由顺序即优先级兜底路由放最后micro-router 把路由参数解析这件容易踩坑的事压缩成了两行代码的心智负担。下次写 Micro 服务时直接把这篇指南收进你的工具箱吧 ️【免费下载链接】micro-router:station: A tiny and functional router for Zeits Micro项目地址: https://gitcode.com/gh_mirrors/mi/micro-router创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考