为什么express.js在使用res.send()时会返回一个空数组?

eff*_*tom 11 node.js express

我有这个包含键和值对数组的对象.

console.log(myObject);

[ 'askdasuni.com': '11111',
  'capsfrom2011.com': '22222',
  'defusionet.com': '33333' ]
Run Code Online (Sandbox Code Playgroud)

当我在我的应用程序中调用res.send(myObject)时,我得到以下内容:

< HTTP/1.1 200 OK
< X-Powered-By: Express
< Content-Type: application/json; charset=utf-8
< Content-Length: 2
< Date: Wed, 11 Mar 2015 18:15:41 GMT
< Connection: keep-alive
[]
Run Code Online (Sandbox Code Playgroud)

我希望它发送myObject的内容,而不仅仅是"[]".

如果我将代码更改为res.send('string'),我会得到以下内容:

< HTTP/1.1 200 OK
< X-Powered-By: Express
< Content-Type: text/html; charset=utf-8
< Content-Length: 6
< Date: Wed, 11 Mar 2015 18:21:09 GMT
< Connection: keep-alive
< 
string
Run Code Online (Sandbox Code Playgroud)

Phi*_*der 13

我有同样的问题,填充的"对象"作为空数组返回,尽管与console.log很好地显示.

经过检查,我发现我实际上已经初始化了一个数组,然后使用它就好像它是一个对象:

var myObject = [ ]
myObject['...'] = ...
...
res.send(myObject)

=> [ ]
Run Code Online (Sandbox Code Playgroud)

结果变量最好被描述为" 具有属性的空数组 "而不是对象,因此res.send()不返回这些值.

解决方案1

使用花括号将变量初始化为对象:

var myObject = { }      <----- curly braces
myObject['...'] = ...
...
res.send(myObject)

=> { x : object-x, y : object-y, z : object-z }
Run Code Online (Sandbox Code Playgroud)

解决方案2

在返回之前将结果转换为对象,如下所示:

var myObject = [ ]
myObject['...'] = ...
...
var myObject = [ ]
let obj = { }
for (var key in myObject) {
  obj[key] = myObject[key]
}
res.send(obj)

=> { x : object-x, y : object-y, z : object-z }
Run Code Online (Sandbox Code Playgroud)

  • 怎么没人投这个 (2认同)

A.B*_*A.B 4

尝试发送

res.json(myObject)
Run Code Online (Sandbox Code Playgroud)

res.json 确保响应具有 utf8 字符集和 application/json 内容类型