我正在运行一个 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' });
}
});
});
并添加对应的按钮到起始索引页面,该按钮向“/pars”端点发送ajax请求:
...
<button id="btn">Parse Data</button>
<script>
$( document ).ready(function() {
$('#btn').click(function () {
$.get(
"/pars",
onAjaxSuccess
);
});
function onAjaxSuccess(data) {
alert(data);
};
});
</script>
所有东西都运行良好,我成功地重新加载了页面,并使用“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);
}
});
也许有人能帮助我解决这个问题?