【发布时间】:2015-07-19 12:10:02
【问题描述】:
我正在运行一个 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' });
}
});
});
并添加了相应的按钮来启动索引页面,将 ajax 发送到那个“/pars”端点:
...
<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);
}
});
也许有人可以帮助我解决这个问题?
【问题讨论】:
-
理论上,当您完成从 ftp 下载文件时,连接本身仍然保持打开状态。然后,由于不活动,服务器在超时一段时间后关闭此连接。使用完 ftp 后,尝试手动打开/关闭连接。或者,如果您确实需要长时间打开连接,则可以向 ftp 服务器发送一些“空闲”命令以防止连接关闭...
标签: javascript node.js ftp