I'm beginning with Node JS, and I get an error :
Error: Can't set headers after they are sent.
You can see my code, the problem is with res.download()
; Or, how can I show the view without res.render()
?
Can you tell me how to fix this issue? Thanks you!
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');
});
})
You are sending res.download
after res.render
. this will try to send the response again, but you can't send response two times. That is what is causing the error Error: Can't set headers after they are sent.
What you need to do is render
the view first( you can send a get
request to render the view) and when that view is loaded, call another route
to download
the file( send post
route to download)
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');
});
})
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.