Я начинаю с 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');
});
})
Вы отправляете res.download
после res.render
. это попытается отправить ответ еще раз, но вы не можете отправить ответ два раза. Это то, что вызывает ошибку. Error: Can't set headers after they are sent.
Что вам нужно сделать, это render
представление сначала (вы можете отправить запрос на get
для представления представления), и когда это представление будет загружено, вызовите another route
для download
файла (отправьте post
маршрут для загрузки)
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');
});
})
res.render
иres.download
.