express request错误:解析大型xml时的socket hangup

时间:2015-10-29 09:37:07

标签: javascript xml node.js express

我试图在工作者nodejs应用程序中将300MB xml文件解析为json,因此客户端向主Web应用程序发出请求,服务器在工作服务器完成解析后向文件位置的工作服务器发出请求它将xml保存到json文件并将其位置返回给主服务器。

对于130MB以下的xml文件,一切正常,但是当遇到大文件时,工作服务器完成解析文件并保存,一旦响应到达它收到的主服务器:

 { [Error: socket hang up] code: 'ECONNRESET' }

我尝试在请求选项中使用超时,但它仍然在发生。

request
      .post({
             url:'http://localhost:6666/parsexml',
             formData: {filePath:filePath},
             json: true
      },function(err,httpResponse,jsonResObj){
         // throws error here
      })
  • xml解析器工作程序将200消息返回给服务器,然后崩溃。

Anny建议如何实现这个?

1 个答案:

答案 0 :(得分:0)

也许您必须使用不同的XML解析器,例如xml-stream,它可以处理大型(500+ MB)文件。

如何安装

使用以下命令安装它: npm install -g xml-stream

如何在您的应用中使用

在项目中需要它并传递ReadFile对象来初始化它:

var fs        = require('fs');
var XmlStream = require('xml-stream');
/*
   * Pass the ReadStream object to xml-stream
*/
var stream=fs.createReadStream('file_name.xml');
var xml = new XmlStream(stream);
/*
  *Code continues here
*/

如果您只想从XML中提取id的值,并打印出来,那么这是一个代码:

var fs        = require('fs')
var XmlStream = require('xml-stream') ;
var stream=fs.createReadStream('some-large-XML.xml');
var xml = new XmlStream(stream);
xml.preserve('id', true);
xml.collect('subitem');
xml.on('endElement: id', function(item) {
  console.log(item);
});

可以找到更详细的信息here