在路由中使用RE和命名时,'0'项目

我试图拆分下面的URL(他们是没有限制的子查询):

www.zookeeper.com/api/zoo/monkey/1/feed

成:

{ "Main": "zoo", "Sub": "/monkey/1/feed" } 

在下面的代码中, SUB_REQUEST字段中总是缺less最后一个字符。

 router.get("/:BASE_REQUEST/*:SUB_REQUEST",function(req,res) { res.json( { "Main":req.params.BASE_REQUEST, "Sub":req.params.SUB_REQUEST+req.params[0]//append last char hack! }); }); 

如果你看看req.params,总会有一个神秘的'0'。

 { '0': 'd', BASE_REQUEST: 'zoo', SUB_REQUEST: '/monkey/1/fee' } 

有人可以解释这种行为吗? 这个'0'来自哪里?

我正在使用快速版本4.12.4

当然,这里发生的事情是,你的路线实际上是挑选出3条路线,你认为他们正在挑选2条路线。

如果你尝试做console.log(req.params); 在您的路由处理程序中,您将看到/bob/is/your/uncle的请求将导致以下对象:

{ '0': 'is/your/uncl', BASE_REQUEST: 'bob', SUB_REQUEST: 'e' }

这是因为你已经命名了两个参数,并且在那里还有一个未命名的通配符,默认为名称'0'。 第三个参数必须消耗至less一部分路由,所以它抓住了最后一个字母。 我不知道为什么你的机器似乎是颠倒SUB和0,除非你错误地写了这个问题。

如果你只是摆脱:SUB_REQUEST ,它应该以你想要的方式工作,你只需通过req.params.0 (或req.params['0'] )引用通配符位。 在以前的Express版本中,曾经有能力拥有一个命名的通配符参数,但是我不能再在文档中find这个参数,所以我希望他们不要这样做,以使其他的工作更好。