我正在使用本地mongo rest api对应用程序进行原型开发,其中Node返回约400K的json。我使用以下方法来MAKET他请求蒙戈的原生API,并返回结果:NodeJS/ExpressJS在1个流中发送大量数据的响应
http.request(options, function(req)
{
req.on('data', function(data)
{
console.log(data,data.rows);
response.send(200, data);
}
);
}
)
.on('error', function(error)
{
console.log('error\t',error);
response.send(500, error);
}
)
.end();
当我通过卷曲打http://localhost:8001/api/testdata
,响应是正确的(这两个是什么输出从console.log
节点的控制台,什么是接收通过卷曲)。但是当我通过应用程序中的ajax点击它时,流被中断,即使data
输出到Node的控制台(终端)也很奇怪:它具有多个EOF,并且chrome开发工具中的调用的网络>响应结束于第一个EOF。
另外一个奇怪的事情:data
样子:
{
"offset": 0,
"rows": [ … ]
}
但没有节点也没有客户端(角),我可以引用data.rows(它返回undefined)。 typeof data
返回[object Object]
。
EDIT两个卷曲和角度(如由节点报告)请求头是:
req.headers: {
'x-action': '',
'x-ns': 'test.headends',
'content-type': 'text/plain;charset=utf-8',
connection: 'close',
'content-length': '419585'
}
EDIT I(从节点的代替)检查响应头在两个角和卷曲直接annnd有(从节点从两个卷曲和角度相同的输出,而不是直接的)是一个分歧:
access-control-allow-headers: "Origin, X-Requested-With, Content-Type, Accept"
access-control-allow-methods: "OPTIONS,GET,POST,PUT,DELETE"
access-control-allow-origin: "*"
connection: "keep-alive"
content-length: "65401" // <---------------- too small!
content-type: "application/octet-stream"
// ^-- if i force "application/json"
// with response.json() instead of response.send() in Node,
// the client displays octets (and it takes 8s instead of 0s)
date: "Mon, 15 Jul 2013 18:36:50 GMT"
etag: ""-207110537""
x-powered-by: "Express"
我会尝试读取Node中的标头和请求主体,并让它跟踪/打印出两种情况下会发生的情况。这是试图了解请求信息的不同之处或请求发生的方式,然后搜索解决curl请求和ajax请求之间差异的方法的具体答案(设置角等中的标头) – shaunhusain
@ shaunhusain,我检查了头文件,他们是一样的,所以我也检查了整个'req'对象(使用FileMerge),它返回_0 differences_ – jacob
以及令人毛骨悚然的:)抱歉,我不知道该怎么告诉你,如果发送给机器的数据完全相同,并且以两种不同的方式响应,我不知道发生了什么。也许我们惹怒了节点神或角神(可能是一些低级的OSI神),我们应该悔改。你如何捕获你的数据?我曾经使用Charles取得了很多成功(你确定这发生了吗?) – shaunhusain