我试图拆分以下网址(它们对子查询没有限制):
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
答案 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中曾经有能够拥有一个命名的通配符参数,但是我在文档中找不到它,所以我希望它们不再使用它来使其他东西更好地工作。