【问题标题】:What could be the reason for Error: Can't set headers after they are sent错误的原因可能是什么:发送后无法设置标头
【发布时间】:2014-11-27 14:56:18
【问题描述】:

大家好,我遇到了错误

Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:331:11) at ServerResponse.header (/Users/rajesh/Documents/NodeProject/nodetest1/node_modules/express/lib/response.js:662:10) at ServerResponse.send (/Users/rajesh/Documents/NodeProject/nodetest1/node_modules/express/lib/response.js:146:12) at fn (/Users/rajesh/Documents/NodeProject/nodetest1/node_modules/express/lib/response.js:896:10) at View.exports.renderFile [as engine] (/Users/rajesh/Documents/NodeProject/nodetest1/node_modules/jade/lib/jade.js:325:12) at View.render (/Users/rajesh/Documents/NodeProject/nodetest1/node_modules/express/lib/view.js:76:8) at Function.app.render (/Users/rajesh/Documents/NodeProject/nodetest1/node_modules/express/lib/application.js:527:10) at ServerResponse.res.render (/Users/rajesh/Documents/NodeProject/nodetest1/node_modules/express/lib/response.js:900:7) at /Users/rajesh/Documents/NodeProject/nodetest1/app.js:57:9 at Layer.handle_error (/Users/rajesh/Documents/NodeProject/nodetest1/node_modules/express/lib/router/layer.js:58:5)

谁能告诉我这可能是什么原因。我的代码是

router.post('/readCSVFile',function(req,res){

if(typeof req.files.fileCSV === 'undefined'){
    var err = {message: 'Please Select CSV file'};
    res.render('error', {message: err.message,error: err});
}

    var reader = yaCSV.createCsvFileReader(req.files.fileCSV.path,{
        'separator':',', 'quote':'"', 'escape':'"'
    });

    reader.addListener('data',function(data){
        var json = createJsonObject(data);
        _data.push(json);
        });

    reader.addListener('error',function(err){
        console.error("err.status " + err.status);
        //err.status = 500;
        //res.status(500);
        err.message = 'Select the proper CSV file';
        res.render('error', {message: err.message,error: err});
        console.error(util.inspect(err));
    });
    reader.addListener('end', function() {
        res.render('renderCSV',{data: _data});
    });
    var _data = [];

});

【问题讨论】:

  • 据我所知,当您调用 response.render 时,它会发送完整的 HTTP 响应。因此,如果您像在代码中的某些代码路径中那样再次调用它,则会出现此错误,因为它无法发送另一组 HTTP 响应标头,因为它已经开始写入响应正文。

标签: javascript node.js


【解决方案1】:

在每个“res.render”命令之后添加一个“return”语句。

【讨论】:

  • 嗨 takinola ..它适用于第一种情况,即“req.files.fileCSV”未定义但适用于处理 csv 文件时出现错误的情况,但不是。即使在添加返回之后,它仍然会抛出我上面提到的错误。只是想了解为什么它会抛出这个错误,因为响应是基于条件创建的。当它完成时,代码将进入“结束”回调CSV文件的所有处理。
【解决方案2】:

我知道为什么它对我不起作用。我在回调函数中收到多个错误,这些错误已为“ya-csv”中的错误注册。所以我已经发送了一个响应。我的代码正在尝试发送第二个响应,因此错误。我通过放置和 if 条件并将其作为一个来解决它。

谢谢 -学习者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 2018-06-08
    • 2018-06-29
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多