Вы должны быть особенно осторожны с функцией обратного вызова pool.query
.В старых кодах
data = {
name: req.body.name,
password: req.body.password,
user: 'administrator'
};
pool.query('INSERT INTO users SET ?', data, function (err, result) {
// If I omit this if statement it works fine
if (err) {
next(err);
return;
}
});
res.render('review_papers');
res.render
будет выполнено первым, чем pool.query
.Итак, в основном вы уже говорите, что запрос выполняется без ожидания pool.query
для завершения.
Через несколько секунд pool.query
закончен.Ваша проблема в том, что в вашем запросе обнаружена ошибка, поэтому он перейдет к next(err)
, который также говорит о том, что ваш запрос выполнен.Это неверно, потому что вы не можете сказать, что запрос выполнен более одного раза.Это вызывает Cannot set headers after they are sent to the client error message
.
Простой обходной путь - переместить res.render
внутрь pool.query
, например
pool.query('INSERT INTO users SET ?', data, function (err, result) {
// If I omit this if statement it works fine
if (err) {
return next(err); // we can just return here
}
res.render('review_papers');
});