我正在使用 ssh2 连接到远程 sftp 服务器。代码如下所示:
fetchFileList() {
return new Promise((resolve, reject) => {
const sshClient = new Client();
let isReady = false;
logger.info("fetchFileList making SF connection");
sshClient.on("ready", () => {
isReady = true;
logger.info("Ready");
sshClient.sftp((err, sftp) => {
if (err) {
logger.error("Some error occoured ", { err });
reject("Error establishing sftp connection");
}
logger.info("Sftp connection is successful");
sftp.readdir(CONST.EXTRACT.FTP_DIRECTORY, (err, files) => {
if (err) {
reject(new CustomError("Sftp read dir", err));
}
// Read all file 'formats' from entity db
sortFilesByTables(files)
.then(result => {
resolve({ sshClient, sftp, result });
})
.catch(err => {
reject(new CustomError("Error sorting files by tables ", err));
});
});
});
});
sshClient.on("error", err => {
logger.error("Error connecting to sftp server ", err);
webHook
.send(
utils.composeSlackMessage(
"Error connecting to sftp server",
CONST.EXPORT.SLACK_MESSAGE_TYPES.ERROR,
err
)
)
.catch(err => logger.error("Webkook catch ", err));
reject(new CustomError("Error connecting to sftp server ", err));
});
sshClient.on("end", () => {
if (!isReady) {
logger.error(
"fetchFileList on end Callback could not establish sftp connection"
);
reject(
"fetchFileList on end Callback could not establish sftp connection"
);
}
});
sshClient.connect({
host: ftpCredentials.host,
port: ftpCredentials.port,
username: ftpCredentials.username,
password: ftpCredentials.password,
readyTimeout: 90000
});
});
}
有时在尝试连接时,会调用 end 回调,但不会调用 error 或 ready 回调。有谁知道为什么会这样?当无法与 sftp 服务器建立连接时,不应该发生错误回调吗?(之前我只有准备好和错误回调,在这种情况下都没有被调用,我的服务器程序挂在这个 Promise 中)。
我正在使用的节点模块是"ssh2": "^0.6.1"
,