如何在Express同一条GET路由中配置多个可选路径参数
解决方案
// 路由规则匹配/test/后所有用&连接的非/字符内容 app.get("/test/:content([^&/]+(?:&[^&/]+)*)", (req, res) => { // 拆分捕获到的内容为参数数组 const paramArr = req.params.content.split('&') // 按要求生成q1/q2/q3格式的参数覆盖原params req.params = {} paramArr.forEach((val, index) => { req.params[`q${index + 1}`] = val }) // 测试输出 console.log(req.params) res.send('ok') })
- 路由中的正则
[^&/]+(?:&[^&/]+)*会自动匹配1~N个用&连接的路径片段,不会出现参数缺失时404的问题 - 手动拆分后生成的参数结构完全符合要求的
{q1: xx, q2: xx...}格式,不需要额外调整后续业务逻辑 - 该方案只需要配置一条路由,不需要为不同参数数量单独编写规则
如果需要限制最多只接受3个参数,可以在拆分后增加校验逻辑:
if (paramArr.length > 3) { return res.status(400).send('参数数量不能超过3个') }
内容的提问来源于stack exchange,提问作者MTS MIA
相关产品推荐
相关产品推荐

