ssh2-sftp-client получает несколько файлов - ошибка "запись после завершения"
Я пытаюсь загрузить несколько файлов с FTP, но я получаю сообщение об ошибке: "запись после завершения". Я не могу найти проблему.
connections.js
async function getFtpFileContent(_path) {
const ftpConfig = {
host: config.FTPhost.replace('https://', ''),
username: config.FTPusername,
password: config.FTPpassword
};
let ftpFileContent;
let sftp = new StfpClient();
try {
await sftp.connect(ftpConfig);
const stream = await sftp.get(_path);
ftpFileContent = await readStream(sftp, stream);
stream.close();
await sftp.end();
} catch (error) {
console.log('FTP Error: \n', error);
}
return ftpFileContent;
}
function readStream(sftp, stream) {
return new Promise((resolve, reject) => {
let body;
stream.on('data', chunk => {
body += chunk;
});
stream.on('end', () => {
resolve(body);
});
stream.on('error', err => reject(err));
});
}
вызов в следующем методе:
async function getFiles(req, res) {
// first file
let fileContent = await conn.getFtpFileContent(filePath);
// second file
let fileContent2 = await conn.getFtpFileContent(filePath2);
}
Когда я вызываю метод getFtpFileContent второй раз, я получаю упомянутую ошибку ("запись после завершения").
Не могли бы вы мне помочь? Где я делаю ошибку?
2 ответа
Я нашел проблему. Проблема была в конвертере CSV, который я использовал позже. Конвертер использовал доступный для записи поток, который не был закрыт после конвертации.
Я не уверен, где ваша проблема, но вы должны вызывать stream.close() в функции getFtpFileContent? Я не вижу ничего о методе close для потока, только о событии close.