2015-07-19 120 views
2

我米运行的Express 4的应用程序,我加了一些逻辑路由器:node.js的错误:读ECONNRESET

router.get('/pars', function(req, res, next) { 

    fetcher.parseXml(function(err, result){ //download files from ftp server, it can takes from 10 sec to 1 minute 
     if(err) { 
      console.log("router " + err); 
      res.render('index', { title: err }); 
     }else { 
      console.log(result); 
      res.render('index', { title: 'Download finish' }); 
     } 
    }); 
}); 

并补充coressponding按钮开始索引页,即发送AJAX到“/收杆“端点:

... 
<button id="btn">Parse Data</button> 

    <script> 
     $(document).ready(function() { 

      $('#btn').click(function() { 
       $.get(
         "/pars", 
         onAjaxSuccess 
      ); 
      }); 
      function onAjaxSuccess(data) { 
       alert(data); 
      }; 
     }); 
</script> 

因此,所有工作正常,我sucesfully刷新页面,并使用从FTP下载文件‘jsftp’模块,但一段时间后(也可能是30秒或2分钟)我有错误,毁损我的应用:

events.js:85 
     throw er; // Unhandled 'error' event 
      ^
Error: read ECONNRESET 
    at exports._errnoException (util.js:746:11) 
    at TCP.onread (net.js:559:26) 

,我发现类似的问题在Node js ECONNRESET

,并将此“醒目”的代码我app.js:

process.on('uncaughtException', function (err) { 
    console.error(err.stack); 
    console.log("Node NOT Exiting..."); 
}); 

现在应用犯规崩溃,但修建垃圾该错误可不timeto我的日志,所有的逻辑都可以正常工作。

我想问题可能在ftp.get:

Ftp.get(config.get("ftpDownloader:dir") + '/'+ fileName, __dirname + '/xml/' + fileName, function(hadErr) { 
     if (hadErr){ 
      log.error('There was an error retrieving the file.' + hadErr); 
      ftpDonwloadCallback(hadErr); 
     }else{ 
      log.info("XML WAS DOWNLOADED: " + fileName); 
      readFile(fileName, ftpDonwloadCallback); 
     } 
    }); 

也许有人可以帮我,我怎么能解决这个问题?

+2

理论上,当你完成从ftp下载文件时,连接本身仍然保持打开状态。然后,服务器由于不活动而在超时后关闭此连接。尝试在使用ftp完成工作后手动打开/关闭连接。或者,也许发送一些“空闲”的命令到FTP服务器,以防止连接关闭,如果你真的需要连接打开很长一段时间... –

回答

2

取决于错误信息:

events.js:85 
     throw er; // Unhandled 'error' event 
      ^
Error: read ECONNRESET 
    at exports._errnoException (util.js:746:11) 
    at TCP.onread (net.js:559:26) 

它是由TCP连接造成的。如果底层套接字接收到'错误'事件,但没有'错误'事件监听器,它会传播并崩溃你处理。

检查你的http服务器,向它添加错误事件监听器。

例如:

var server = http.createServer(function(request, response){ ... ... }); 

server.on('error', function(err) { ... ... }); 
如果你想赶上从客户端的错误,您可以侦听器clientError“事件