Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS/ExpressJS在一个流中发送大量数据的响应_Node.js_Mongodb_Angularjs_Express_Xmlhttprequest - Fatal编程技术网

Node.js NodeJS/ExpressJS在一个流中发送大量数据的响应

Node.js NodeJS/ExpressJS在一个流中发送大量数据的响应,node.js,mongodb,angularjs,express,xmlhttprequest,Node.js,Mongodb,Angularjs,Express,Xmlhttprequest,我正在使用本机mongo rest api原型化一个应用程序,其中节点返回大约400K的json。我使用以下命令向mongo的本机api发出请求并返回结果: http.request(options, function(req) { req.on('data', function(data) { console.log(data,data.rows); response.send( 200, data ); } ); } ) .on

我正在使用本机mongo rest api原型化一个应用程序,其中节点返回大约400K的json。我使用以下命令向mongo的本机api发出请求并返回结果:

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
通过curl,响应是正确的(从
控制台.log输出到节点控制台的内容以及curl接收到的内容)。但当我在我的应用程序中通过ajax点击它时,流被…中断,甚至输出到节点控制台(终端)的
数据也很奇怪:它有多个EOF,chrome开发工具中调用的Network>响应在第一个EOF结束

另一件奇怪的事情:
数据
看起来像:

{
    "offset": 0,
    "rows": [ … ]
}
但无论是在节点还是客户端(角度),我都不能引用data.rows(它返回未定义)<代码>数据类型
返回
[对象]

编辑卷曲和角度(由节点报告)的请求头包括:

编辑我直接检查了angular和curl中的响应头(而不是从节点),annd存在不一致(curl和angular中的输出相同,而不是从节点):

访问控制允许标题:“来源、X请求、内容类型、接受”
访问控制允许方法:“选项、获取、发布、放置、删除”
访问控制允许来源:“*”
连接:“保持活力”
content length:“65401”/节点的http.request()返回用于流式传输的数据(如果他们明确声明这一点,那就更好了)。因此,有必要将每个块写入Express响应的主体(没有真正记录),然后调用
response.end()
,以实际完成响应

var req = http.request(options, function(res)
  {
    res.on( 'data', function(chunk) { response.write(chunk); } );
    res.on( 'end', function() { response.end(); } );
  }
);
req.on('error', function(error) { … });
req.end();

其中
response
是Express对初始客户机请求的响应(curl或angular的ajax调用)。

我会尝试读取节点中的标题和请求主体,并让它跟踪/打印出这两种情况下的结果。也就是说,尝试了解请求信息的差异或请求发生的方式,然后搜索具体的答案,以解决curl请求和ajax请求之间的差异(在angular等中设置标题)。@shaunhusain,我检查了标题,它们是相同的,因此,我还检查了整个
req
对象(使用FileMerge),它返回0个差异。很可怕:)抱歉,我不知道该告诉你什么,如果发送到机器的数据完全相同,并且它以两种不同的方式响应,我不知道发生了什么。也许我们激怒了节点神或角神(也许是一些较低级别的OSI神),我们应该忏悔。您是如何捕获数据的?在过去,我用查尔斯取得了很多成功(你确定这会发生吗?@shaunhusain,哈哈!太好笑了。嗯,我只是试着从Angular中吐出响应头,它们与Node报告的不同。更新了我的问题。charles是一个数据包嗅探器(比如Wireshark)?很抱歉,你忘记了你可以在这里找到charles的链接:它将以简单的请求和响应的形式向你显示消息,你可以进行多个会话,并使用过滤器只显示你感兴趣的流量(特定的协议和域等)您还可以右键单击在charles中看到的行并保存请求/响应,或者如果需要,让它重复查询100次。很多时候它都派上了用场。我想这救了我的命,而且你可以使用pipe()实现一个简化的实现。有一个很小的npm包可以处理样板文件(我想它叫Request)。@jacod任何npm链接,这就是我在@AyushKSingh上看到的我使用的包,但还有一个更简单。我会努力找到它。@AyushKSingh找到了:
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"
var req = http.request(options, function(res)
  {
    res.on( 'data', function(chunk) { response.write(chunk); } );
    res.on( 'end', function() { response.end(); } );
  }
);
req.on('error', function(error) { … });
req.end();