Невозможно установить заголовки после того, как они отправлены клиенту в производстве - PullRequest
0 голосов
/ 13 февраля 2019

У меня заканчиваются идеи, как я собираюсь решить эту проблему

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

, когда я запускаю код js своего узла в экземпляре ec2 (production), но прекрасно работает на моем локальном хосте.

Что я на самом деле делаю, так это загружаю img в корзину s3 с использованием API узла js 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});

});
}

это мой код в контроллере

1 Ответ

0 голосов
/ 13 февраля 2019

Здесь вы получили ошибку 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.

...