繁体   English   中英

从生成的节点进程中捕获ECONNRESET错误

[英]Catching ECONNRESET error from spawned Node process

我正在使用sftps NPM通过用户名/密码身份验证连接到SFTP服务器并上传文件。 成功时,它可以很好地工作; 但是,如果提供了无效的身份验证信息,则几分钟后它将发出ECONNRESET错误,该错误使我的整个应用程序崩溃。

查看sftps模块的源代码,它似乎使用child_process.spawn来运行shell命令,并且看起来它应该优雅地捕获任何错误:

var sftp = spawn(shellCmd, shellOpts);

var data = "";
var error = "";

sftp.stdout.on('data', function (res) {
    data += res;
});

sftp.stderr.on('data', function (res) {
    error += res;
});

function finished(err) {
    error = error.split('\n').filter(function(line) {
        if (/^Connected to /.test(line)) return false;
        return true;
    }).join('\n');
    data = data.split('\n').filter(function(line) {
        if (/^sftp> /.test(line)) return false;
        return true;
    }).join('\n');
    if (callback) {
        if (err) {
            callback(err, { error: error || null, data: data });
        } else if (error) {
            callback(null, { error: error, data: data });
        } else {
            callback(null, { error: null, data: data });
        }
        callback = null;
    }
}

sftp.on('error', finished);

sftp.on('exit', function (code) {
    if (code === 0) {
        finished();
    } else {
        finished('Nonzero exit code: ' + code);
    }
});
sftp.stdin.write(cmdString, 'utf8');

看起来它已经挂接到stderr流中,并且捕获了子进程上的errorexit事件。

我还能采取什么措施来捕获此ECONNRESET错误并将其记录下来而又不终止应用程序?

不知道您是否遇到了与我同样的问题,但最终我通过将事件附加到stdin.on("error")来解决了这个问题。 您可以尝试这样做,看看是否是问题所在:

sftp.stdin.on("error", function (e)
{
    console.log("STDIN ON ERROR");
    console.log(e);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM