' 0'使用RE和命名在快递路线时的项目

时间:2016-04-13 14:27:16

标签: node.js express router

我试图拆分以下网址(它们对子查询没有限制):

  

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

成:

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

在以下代码中, SUB_REQUEST 字段中始终缺少最后一个字符。

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' 0来自?

我使用快递版本4.12.4

1 个答案:

答案 0 :(得分:1)

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

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

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

那是因为你已经命名了两个参数,并且在那里也有未命名的通配符,它​​们表示名称为“0”的默认值。第三个参数必须消耗路线的至少一部分,所以它抓住了最后一个字母。我不确定为什么你的机器似乎正在逆转SUB和0,除非你在如何写出问题时犯了错误。

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