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

我正在使用sftps NPM使用用户名/密码authentication连接到SFTP服务器并上传文件。 成功的时候,这个工作很好。 但是,如果提供了无效的身份validation信息,几分钟后会发出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'); 

它看起来好像挂钩了stderrstream,并捕获subprocess上的errorexit事件。

我还能做些什么来捕获这个ECONNRESET错误并logging下来,而不会ECONNRESET应用程序?

不知道你是否有同样的问题,但我最终通过附加一个事件stdin.on("error")来解决它。 你可以试试看这是否是问题所在:

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