在使用Express时,我遇到了一些与req.params有关的奇怪事情。它适用于调用从属属性 - 例如:res.json(req.params.paramName);给了我想要的paramName值。但是当我试图通过res.json(req.params)将整个res.params对象传递给客户端时,我只是在浏览器中得到一个空数组[]而不是我期望的JSON对象。 (res.send给出相同的结果。)
更深入一点,我将req.params转储到控制台:
console.dir(req.params);
得到了这个:
[ creator: '1', timeStart: '2', timeEnd: '3', dateDensity: '4' ]
WUT?这在Javascript中甚至在语法上是否可行? 如果req.params是一个简单的对象,如Express代码和文档所示,我应该得到:
{ creator: '1', timeStart: '2', timeEnd: '3', dateDensity: '4' }
如果可以的话,就像我上面提到的数组一样可能吗?
我做了一些健全性检查,并将几个测试对象传递给控制台:
console.dir([{foo:1}, {arr:2}, {gog:3}, {blah:4}]);
console.dir({foo:1, arr:2, gog:3, blah:4});
并且控制台转储给了我:
[ { foo: 1 }, { arr: 2 }, { gog: 3 }, { blah: 4 } ]
{ foo: 1, arr: 2, gog: 3, blah: 4 }
所以console.dir工作正常。
最后,我硬编了一个:
res.json({foo:1, arr:2, gog:3, blah:4});
进入我的Express代码,浏览器尽职尽责地给了我:
{
"foo": 1,
"arr": 2,
"gog": 3,
"blah": 4
}
我在这里吸烟吗? req.params发生了什么事?
答案 0 :(得分:2)
这就是v8如何使用字符串键打印出数组:
var myArr = [];
myArr.key = "oops";
请记住,[] instanceof Object
是真的。
req.params
是一个数组,暗示了位置参数的可能性。