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

我开始与节点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'); }); }) 

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

你需要做的是render视图(你可以发送一个get请求来渲染视图),当视图被加载时,调用another routedownload文件(发送postpath下载)

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