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