2015-10-19 71 views
1

我正在使用sftps NPM通過使用用戶名/密碼身份驗證連接到SFTP服務器並上載文件。這成功的時候會很好用;但是,如果提供了無效的身份驗證信息,幾分鐘後它會發出一個ECONNRESET錯誤,這會使我的整個應用程序崩潰。從產生的節點進程中捕獲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流以及捕獲子流程中的error和事件。

我還能做些什麼來捕獲這個ECONNRESET錯誤並記錄它而不會中止應用程序?

回答

2

不知道你是否有同樣的問題,但我最終通過附加一個事件來解決它stdin.on("error")。你可以試試看這是否是問題:

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