节点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 route
来download
文件(发送post
path下载)
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'); }); })