Ваш обработчик маршрута /register
имеет res.send()
внутри обратного вызова базы данных, а также res.render()
в конце обработчика маршрута. Каждый из них пытается отправить запрос на входящий HTTP-запрос. Но вы можете отправлять только ОДИН HTTP-ответ на каждый http-запрос.
Express замечает эту проблему в самом начале второй попытки отправить ответ и замечает ее, когда пытается собрать заголовки в отправить для второго ответа, и он видит, что заголовки уже отправлены, таким образом, сообщение, которое вы получаете.
Итак, вам нужно удалить либо res.send()
или res.render()
, либо как-то объединить их в один ответ.
Соответствующий обработчик маршрута:
app.post("/register", function(req, res, next) {
var attendees = {
name: req.body.name,
email: req.body.email,
session: req.body.selectpicker
};
conn.query("INSERT INTO attendees SET ?", attendees, function(err, result, ) {
// ATTEMPT #1 to send a response
if (err)
res.send(err);
else
res.send("Thank You for registering!");
});
if (i = 0) {
people.pop();
}
subname = req.body.name;
subemail = req.body.email;
subsession = req.body.session;
let locals = {
name: subname,
email: subemail,
session: subsession
};
people.push(subname + "," + subemail + "," + subsession);
console.log(locals);
console.log(subname);
console.log(subemail);
console.log(subsession);
console.log("People: " + people);
// ATTEMPT #2 to send a response
res.render("confirmed", locals);
});
К вашему сведению, ваш оператор if
:
if (i = 0) {
неверен. Это присваивает 0
i
, а затем делает if
в результате присваивания, которое не является тем, что вы хотите. Правильный оператор if
будет выглядеть так:
if (i === 0) {
Также неясно, что вы пытаетесь сделать с общепринятой переменной уровня модуля, такой как i
, которая является общей для всех пользователей и всех запросов. Вероятно, это также неправильный дизайн.
Аналогично, переменные типа subname
, subemail
, subsession
должны объявляться локально внутри вашего обработчика маршрута, а не на уровне модуля.
Помните, что любая переменная, объявленная вне обработчика маршрута, является осколочной для всех пользователей и всех маршрутов, и это не то, чего вы обычно хотите, за исключением длительного состояния, которое совместно используется всеми пользователями и всеми маршрутами на сервере.