Невозможно установить заголовки после их отправки клиенту — Nodejs AWS-S3 GetObject

#node.js #amazon-s3 #response-headers

Вопрос:

Я использую Nodejs с AWS-S3 , и иногда я получаю ошибку:

[ERR_HTTP_HEADERS_SENT]: Не удается установить заголовки после их отправки клиенту

У меня есть эта функция для загрузки любого файла. И когда я вызываю его после определенных запросов, я получаю ошибку.

 export const downloadFile = async(req: Request, res: Response) => {
  res.setHeader('Content-Disposition', 'attachment');

  const params = {
    Bucket: AWS_S3.Bucket,
    Key: req.params.key
  };

  s3.getObject(params)
    .createReadStream()
    .on('error', error => {
      return res.status(500).json({
        message: 'An error ocurred...',
        error
      });
    }).pipe(res);
}
 

Ответ №1:

Эта ошибка возникает, когда вы пытаетесь отправить резюме после того, как оно уже было отправлено. вы уверены, что ваш

 return res.status(500).json({
        message: 'An error ocurred...',
        error
});
 

Не возвращает ли значение после того, как функция уже завершилась? Я бы обязательно дождался выполнения вашего потока, прежде чем приступить к завершению метода. В противном случае вы получите локальное сообщение о том, что мы закончили, фактически не будучи выполненными на сервере, а затем попытаетесь отправить результат снова.