【问题标题】:Node JS : Error with res.download() after res.render()节点 JS:res.render() 之后 res.download() 出错
【发布时间】:2018-04-13 22:36:29
【问题描述】:

我从 Node JS 开始,我得到一个错误:

错误:发送后无法设置标头。

你可以看我的代码,问题出在res.download(); 或者,如果没有res.render(),如何显示视图?

你能告诉我如何解决这个问题吗?谢谢你!

var express = require('express');
var app = express();
var pythonShell = require('python-shell');

app.set('view engine', 'ejs');
app.use(express.static('style'));

app.post('/downloads', function(req, res) {                                 
  res.render('downloads.ejs');
  console.log("Python script begins");
  pythonShell.run('./generator.py', function (err) {
    if (err) throw err;
    console.log("Python Script Ended");
    res.download('mapCreated.tiff', 'map.tiff');
  });
})

【问题讨论】:

标签: javascript node.js express ejs


【解决方案1】:

您在res.render 之后发送res.download。这将尝试再次发送响应,但您不能两次发送响应。这就是导致错误Error: Can't set headers after they are sent.

的原因

您需要做的是首先render 视图(您可以发送get 请求以呈现视图),当加载该视图时,调用another route 到download 文件(发送@987654328 @路由下载)

app.get('/downloads', function(req, res) { 
    res.render('downloads.ejs');
});

app.post('/downloads', function (req,res){
    console.log("Python script begins");
    pythonShell.run('./generator.py', function (err) { 
        if (err) throw err; 
        console.log("Python Script Ended");
        res.download('mapCreated.tiff', 'map.tiff');
    }); 
})

【讨论】:

    猜你喜欢
    • 2016-03-07
    • 2020-12-17
    • 1970-01-01
    • 2018-12-09
    • 2019-07-25
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多