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

Node.js 为什么express.js在使用res.send()时返回空数组?,node.js,express,Node.js,Express,我有一个包含键和值对数组的对象 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/js

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

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
[]
< 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
我希望它发送myObject的内容,而不仅仅是“[]”

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

< 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
[]
< 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
尝试用

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

不要混淆,它们彼此不同,并在需要时使用

res.send([正文]) 发送HTTP响应。body参数可以是缓冲区对象、字符串、对象或数组

res.json([body]) 发送JSON响应。此方法与res.send()相同,参数为对象或数组。但是,您可以使用它将其他值转换为JSON,例如null和undefined。(尽管这些在技术上不是有效的JSON)


因此,如果您严格希望发送JSON响应,最好使用res.JSON(..)

您需要将对象括在花括号中,而不是方括号中,因为您将其作为对象而不是数组发送。在javascript中,键值对必须用花括号括起来。

请参见以下答案:

Javascript数组不能有“字符串索引”。Javascript数组是 唯一的数字索引。当您设置“字符串索引”时,您 设置对象的属性。这些是等效的:

array.a='foo';数组['a']='foo';这些属性不属于 阵列的“数据存储”

e、 g.使用

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

我也有同样的问题,一个填充的“对象”作为空数组返回,尽管它用console.log很好地显示出来

检查后,我发现我实际上初始化了一个数组,然后将其当作对象使用:

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

=> [ ]
结果变量可能最好描述为“带属性的空数组”,而不是对象,因此res.send()没有返回值

解决方案1 使用大括号将变量初始化为对象:

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

=> { x : object-x, y : object-y, z : object-z }

我没有从控制台收到任何消息,get error“

错误: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");
})

我也面临类似的问题。虽然我可以控制台记录数据,但响应将是空的。在回复发出之前,我发现承诺没有得到解决。所以我调用了。然后在异步函数上,从内部返回响应,然后调用。这为我解决了问题。代码如下所示

router.get('/',(req,res) => {
    res.setHeader('Content-Type', 'application/json');
    getParallel().then(obj=>{res.json(obj);res.end()})
})

在发布一些代码后,我猜想您可能在没有回调的情况下调用了一个函数,并且发送了一个空对象。不确定这是否是输入错误,但您列出的数组甚至都无效。我也面临着同样的问题。你有解决办法吗?为什么没有人投票