node.js错误:读取ECONNRESET
我正在运行一个Express 4应用程序,我添加了一些逻辑路由器:
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' }); } }); });
并添加coresspondingbutton来启动索引页面,发送ajax到'/ pars'端点:
... <button id="btn">Parse Data</button> <script> $( document ).ready(function() { $('#btn').click(function () { $.get( "/pars", onAjaxSuccess ); }); function onAjaxSuccess(data) { alert(data); }; }); </script>
所以一切正常,我sucesfully重新加载页面和使用'jsftp'模块从ftp下载文件,但一段时间后(可能是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..."); });
现在的应用程序不会崩溃,但时不时的错误,我的日志,所有的逻辑工作正常。
我认为问题可以在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); } });
也许有人可以帮助我如何解决这个问题?
取决于错误信息:
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”事件。