节点JS:res.render()后res.download()出错

时间:2017-11-01 14:59:55

标签: javascript node.js express ejs

我从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');
  });
})

1 个答案:

答案 0 :(得分:0)

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

的原因

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

post