我有这个包含键和值对数组的对象。
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的内容,而不仅仅是&#34; []&#34;。
如果我将代码更改为res.send(&#39; string&#39;),我会得到以下内容:
< 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
答案 0 :(得分:10)
我有同样的问题,填充的“对象”作为空数组返回,尽管与console.log很好地显示。
经过检查,我发现我实际上已初始化了一个数组,然后将其用作对象:
var myObject = [ ]
myObject['...'] = ...
...
res.send(myObject)
=> [ ]
最终的变量可能最好被描述为“一个带有属性的空数组”而不是一个对象,因此 res.send()
使用花括号将变量初始化为对象:
var myObject = { } <----- curly braces
myObject['...'] = ...
...
res.send(myObject)
=> { x : object-x, y : object-y, z : object-z }
在返回对象之前将其转换为对象,如下所示:
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 }
答案 1 :(得分:4)
尝试使用
发送res.json(myObject)
res.json确保响应将具有utf8字符集和application / json内容类型
答案 2 :(得分:3)
不要与res.json([body]),res.jsonp([body]),res.send([body])混淆,彼此不同,并在需要时使用它。
发送HTTP响应。 body参数可以是Buffer对象,String,对象或Array。
发送JSON响应。此方法与res.send()相同,其中对象或数组作为参数。但是,您可以使用它将其他值转换为JSON,例如null和undefined。 (虽然这些在技术上是无效的JSON)
因此,如果您严格要发送JSON响应,最好使用res.json(..)
答案 3 :(得分:1)
我遇到了类似的问题。虽然我可以控制台记录数据,但响应将为空。在发送响应之前,我发现 Promise 没有得到解决。所以我在异步函数上调用 .then 并从内部返回响应然后调用。那为我解决了这个问题。代码如下所示。
router.get('/',(req,res) => {
res.setHeader('Content-Type', 'application/json');
getParallel().then(obj=>{res.json(obj);res.end()})
})
答案 4 :(得分:0)
您需要将对象包装在大括号中,而不是方括号,因为您将其作为对象而不是数组发送。键值对必须用javascript中的大括号括起来。
答案 5 :(得分:0)
请参阅此答案:Why does a string index in a javascript array not increase the length size?
Javascript数组不能包含“字符串索引”。一个Javascript数组是 完全用数字索引。当你设置“字符串索引”时,你就是 设置对象的属性。这些是等价的:
array.a ='foo'; array ['a'] ='foo';这些属性不属于 数组的“数据存储”。
e.g。使用
{ 'askdasuni.com': '11111',
'capsfrom2011.com': '22222',
'defusionet.com': '33333' }
答案 6 :(得分:0)
我没有从控制台收到任何消息,得到错误“
错误:createError时出现网络错误”
来自Axios的回复。然后我认为这是由CORS引起的。通过添加以下代码解决了该问题:
app.use(function(req,res,next){
res.header("Access-Control-Allow-Origin","*");
res.header("Access-Control-Allow-Headers","Origin,X-Requested-With,Content-
Type,Accept");
res.header("Access-Control-Allow-Methods","PUT,GET,POST,DELETE,OPTIONS");
})