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

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

console.log(myObject); [ 'askdasuni.com': '11111', 'capsfrom2011.com': '22222', 'defusionet.com': '33333' ] 

当我在我的应用程序中调用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 [] 

我期望它发送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 

       

网上收集的解决方案 "为什么express.js在使用res.send()的时候返回一个空的数组?"

尝试发送

 res.json(myObject) 

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

不要与res.json([body]) , res.jsonp([body]) , res.send([body])相互混淆,并在需要时使用它。

res.send([机构])

发送HTTP响应。 body参数可以是一个Buffer对象,一个String,一个对象或者一个Array。

res.json([机构])

发送一个JSON响应。 这个方法与以对象或数组作为参数的res.send()相同。 但是,您可以使用它将其他值转换为JSON,例如null和undefined。 (虽然这些在技术上是无效的JSON)

所以,如果你严格要发送JSON响应,最好是使用res.json(..)

你需要把你的对象放在大括号中,而不是方括号,因为你把它作为对象而不是数组发送。 键值对必须用javascript中的大括号括起来。

看到这个答案︰ 为什么javascript数组中的string索引不增加长度大小?

Javascript数组不能有“string索引”。 一个JavaScript数组是完全数字索引。 当你设置一个“string索引”时,你正在设置对象的一个​​属性。 这些是等价的:

array.a ='foo'; array ['a'] ='foo'; 这些属性不是数组“数据存储”的一部分。

例如使用

 { 'askdasuni.com': '11111', 'capsfrom2011.com': '22222', 'defusionet.com': '33333' }