'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 版本中,曾经有一个命名通配符参数的功能,但我在文档中找不到了,所以我希望他们取消它以使其他事情更好地工作。
我正在尝试拆分以下 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 版本中,曾经有一个命名通配符参数的功能,但我在文档中找不到了,所以我希望他们取消它以使其他事情更好地工作。