我正在运行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' });
}
});
});
并添加了coressponding按钮以启动索引页面,将ajax发送到' / pars'端点:
...
<button id="btn">Parse Data</button>
<script>
$( document ).ready(function() {
$('#btn').click(function () {
$.get(
"/pars",
onAjaxSuccess
);
});
function onAjaxSuccess(data) {
alert(data);
};
});
</script>
所以一切正常,我使用&#39; jsftp&#39;从ftp重新加载页面并从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)
发现了类似的问题
并添加了这个&#39;捕获&#39;代码到我的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);
}
});
也许有人可以帮助我如何解决这个问题?
答案 0 :(得分: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'事件。