Функция GCloud & GStorage: ошибка отправки загруженного файла: «запись после завершения» - PullRequest
0 голосов
/ 10 апреля 2019

Моя цель - извлечь файл из Google Storage, а затем отправить его обратно в ответ.Проблема в том, что, когда я запускаю эту функцию в первый раз, она падает с Error [ERR_STREAM_WRITE_AFTER_END]: write after end.Следующие исполнения работают нормально.

exports = module.exports = region(defaultRegion).https.onRequest(async (req, res): Promise<void> => {
  const [authError] = await to(handleAuth(req, res));
  if (authError) {
    res.status(500).send(authError.message);
    return;
  }

  const { assetId, contentType, path } = req.query;

  const file = bloqifyStorage.bucket().file(`assets/${assetId}/${path}`);

  const fileExists = (await file.exists())[0];
  if (!fileExists) {
    res.status(404).send(`${path} was not found`);
    return;
  }

  const fileStream = file.createReadStream();

  fileStream.pipe(res).on('end', (): void => {
    res.setHeader('content-type', contentType);
  });
});

Что мне здесь не хватает?

Редактировать: удаление установленного заголовка не решает проблему.Пример:

const fileStream = file.createReadStream();

// res.setHeader('content-type', contentType);
fileStream.pipe(res).on('error', (e): void => {
  console.log(e);
});

Будет напечатано то же сообщение об ошибке.

1 Ответ

0 голосов
/ 10 апреля 2019

Вы пытаетесь установить заголовок после отправки ответа.Вы не можете этого сделать - заголовки должны быть перед телом.Звоните res.setHeader() до pipe().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...