'0' 在 express with route 中使用 RE 和 Naming 时的项目

'0' Item when using RE and Naming in express with route

我正在尝试拆分以下 URL(它们对子查询没有限制):

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”到底是从哪里来的?

我使用的是 Express 版本 4.12.4

当然,这里发生的事情是你的路由实际上选择了 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 版本中,曾经有一个命名通配符参数的功能,但我在文档中找不到了,所以我希望他们取消它以使其他事情更好地工作。