发送到客户端后无法设置 headers - Nodejs + AWS-S3 getObject

Cannot set headers after they are sent to the client - Nodejs + AWS-S3 getObject

我将 NodejsAWS-S3 一起使用,但有时出现错误:

[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

我有这个功能可以下载任何文件。当我在某些请求后调用它时,我得到了错误。

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);
}

当您在已经发送 res 后尝试发送 res 时,会发生此错误。你确定你的

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

函数结束后没有返回值?我会确保在到达方法结束之前等待您的流的执行。否则,您将在本地收到一些 OK 我们已经完成,但实际上并未在服务器上完成,然后再次尝试发送结果。