javascript - 在生产中将 header 发送到客户端后无法设置 header

标签 javascript amazon-web-services amazon-ec2 production

我已经没有主意了,我将如何解决这个问题

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

当我在 ec2 实例(生产)中运行我的 Node js 代码但在我的本地主机中运行良好时。

我实际上做的是使用 Node js API 将 img 上传到 s3 存储桶 https://grokonez.com/aws/node-js-restapis-upload-file-to-amazon-s3-using-express-multer-aws-sdk

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

});
}

这是我在 Controller 中的代码

最佳答案

这里出现错误InvalidAccessKeyId:您提供的AWS访问 key ID在我们的记录中不存在并且在err block 中您设置了res.status所以首先是这个 block 执行并向客户端发送响应,之后当它尝试执行 `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 错误。

关于javascript - 在生产中将 header 发送到客户端后无法设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54671845/

相关文章:

amazon-web-services - 如何将 AWS EC2 ubuntu 实例加入到简单目录

javascript - 根据鼠标 X 倾斜线

javascript - Jquery: iPhone "slide to unlock"

javascript - 如何从 SP.UI.ModalDialog 获取参数?

authentication - Server 2012 本地共享 - 无法使用\\IP 访问,但可以通过\\localhost 工作

node.js - 如何实现 Node.js 应用程序日志记录到 CloudWatch

javascript - 使用 SQLite FTS3,如何加入或嵌套 SELECT 语句来获取行加片段?

amazon-web-services - 获取服务 : AmazonIdentityManagement; Status Code: 400; Error Code: MalformedPolicyDocument for while creating Cloudformation stack

amazon-web-services - 是否可以在 cloudformation 模板中静态指定 AWS::StackName?

ubuntu - 在没有停止/启动或弹性 IP 的情况下更改 EC2 实例的公共(public) IP 地址