Я использую NPM sftps для подключения к SFTP-серверу, используя аутентификацию имени пользователя и пароля и загрузку файла. Это прекрасно работает при успешной работе; однако, если предоставлена неверная информация аутентификации, через несколько минут она испускает ошибку ECONNRESET
, которая вызывает сбой всего моего приложения.Ловля ошибки ECONNRESET из порожденного процесса узла
Глядя на источник модуля sftps, по-видимому использовать child_process.spawn
для выполнения команд оболочки, и похоже, что должен быть захватывая ошибки изящно:
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
, а также для сбора событий error
и exit
в подпроцессе.
Что еще можно сделать, чтобы уловить эту ошибку ECONNRESET
и зарегистрировать ее без потери приложения?