Express'req.params的格式是什么?

时间:2013-11-21 10:17:31

标签: javascript json node.js express

在使用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发生了什么事?

1 个答案:

答案 0 :(得分:2)

这就是v8如何使用字符串键打印出数组:

var myArr = [];
myArr.key = "oops";

请记住,[] instanceof Object是真的。

req.params是一个数组,暗示了位置参数的可能性。