当前位置: 代码迷 >> JavaScript >> 将标头发送到生产环境中的客户端后无法设置标头
  详细解决方案

将标头发送到生产环境中的客户端后无法设置标头

热度:136   发布时间:2023-06-03 18:19:12.0

我的想法快用完了,我怎么解决这个问题

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

当我在ec2 instance(production)中运行我的节点js代码时,但在我的本地主机中运行完美。

我实际上是在使用节点js API 将img上传到s3存储桶

var stream = require('stream');

 const s3 = require('../config/s3.config.js');

 exports.doUpload = (req, res) => {
const s3Client = s3.s3Client;
const params = s3.uploadParams;

params.Key = Date.now() +'_'+req.file.originalname
params.Body = req.file.buffer;

s3Client.upload(params, (err, data) => {
    if (err) {
        res.status(500).json({error:"Error -> " + err});
    }
    res.json({message: 'File uploaded successfully! -> keyname = ' + params.Key,file_name: params.Key});

});
}

这是我在控制器中的代码

在这里,您会收到一个错误InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records并且在err块中设置了res.status因此首先执行此块并将响应发送给客户端,此后它尝试执行`res.json'会发生此错误,您所需要的只是对数据使用另一个条件。

s3Client.upload(params, (err, data) => {
    if (err) {
        res.status(500).json({error:"Error -> " + err});
    } else if(data){
        res.json({message: 'File uploaded successfully! -> keyname = ' + params.Key,file_name: params.Key});
    }
});

使用此代码,您可以处理错误而不会出现任何ERR_HTTP_HEADERS_SENT错误。

  相关解决方案