【发布时间】:2017-09-25 01:58:50
【问题描述】:
我几乎肯定这个错误存在于 express 处理路由定义中的正则表达式模式的方式中,但话又说回来,它可能存在于我的模式中(我仍然是一个正则表达式新手,所以请原谅)。在我的快速路由定义中,我试图匹配路由路径中的数字:
const router = express.Router()
// pattern: ignore first capture (/)
router.route(/^(?:\/)(\d+)$/)
.get(...callback)
目前,捕获的数字可以是任意长度。因此,当 url 为:http://localhost:8000/1234 时,事情按预期工作,除了未捕获完整数字的事实 - 当我在回调中记录请求参数时,我得到:{ '0', '4' }。如您所见,我得到了号码的最后一位:4:1234。出了什么问题?我在这里用力挠头。当我在regexr 和 Node REPL:/^(?:\/)(\d+)$/.exec('1234')[1] === '1234' 中测试我的正则表达式时,它似乎匹配正确。任何帮助/见解将不胜感激。谢谢。
[编辑]:按照@Tolsee的建议,我将我的快递包从v4.15.3升级到v4.15.5(最新版本)。这似乎解决了这个问题;现在,我的正则表达式模式正在为这条路线工作。我猜问题出在较旧的快递包裹上。
【问题讨论】:
-
如果你的路由中的数字是一个参数,那么它可以被
router.route('/:id')捕获 -
我应该考虑到这一点。我想在将模式用于另一条路线后,我的思想仍处于正则表达式模式。感谢您的回复。现在,虽然您的方法确实有效,但我仍然很好奇为什么正则表达式方法在这里失败了。
-
您使用的是什么版本的快递?它对
4.15.5非常有效。你表明req.params是{'0', '4'}不是req.params一个js 对象?? -
@Tolsee 我刚刚升级了我的快递包裹。它现在在版本
4.15.5中工作。以前,我在我的应用程序中运行 v4.15.3。我想这是一个明确的问题。感谢您在这里的洞察力;是的,req.params在这里是一个 JS 对象。这是我现在要接受的答案。如果您愿意将此作为答案提交,我会将其标记为正确回复。
标签: javascript regex express