2015-10-19 2 views
1

Я использую 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 и зарегистрировать ее без потери приложения?

ответ

2

Не знаю, есть ли у вас такая же проблема, что и у меня, но я в конечном итоге решил ее, присоединив событие к stdin.on("error"). Вы можете попробовать это, чтобы узнать, есть ли в этом проблема:

sftp.stdin.on("error", function (e) 
{ 
    console.log("STDIN ON ERROR"); 
    console.log(e); 
}); 
Смежные вопросы