在路由中使用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这个参数,所以我希望他们不要这样做,以使其他的工作更好。