ssh2-sftp-client получает несколько файлов - ошибка «запись после завершения» - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь загрузить несколько файлов с ftp, но получаю сообщение об ошибке: «write after end».Я не могу найти проблему.

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 ]

0 голосов
/ 28 января 2019

Я нашел проблему.Проблема была в конвертере CSV, который я использовал позже.Конвертер использовал доступный для записи поток, который не был закрыт после конвертации.

0 голосов
/ 28 января 2019

Я не уверен, где ваша проблема, но вы должны вызывать stream.close () в функции getFtpFileContent?Я не вижу ничего о методе close для потока, только событие close.

...