Эта ошибка возникает, когда вы отправляли ответ раньше, а затем пытаетесь отправить ответ еще раз. Для этого вы должны проверить, есть ли фрагмент кода, который отправляет ваш ответ дважды. Иногда это происходит из-за асинхронного поведения nodejs. Иногда процесс будет в цикле обработки событий, и мы отправим ответ, а когда он завершится, ответ будет отправлен снова. Таким образом, вы можете использовать обратные вызовы или асинхронное ожидание для выполнения.
Обратный вызов
const controller = {};
const { Pool } = require('pg');
var connectionString = 'postgres://me:system@localhost/recipebookdb';
const pool = new Pool({
connectionString: connectionString,
})
controller.list = (request, response) => {
pool.query('SELECT * FROM recipes', (err, result) => {
if (err) {
return next(err);
}
return response.render('recipes', { data: result.rows });
});
};
controller.save = (req, res) => {
pool.query('INSERT INTO recipes(name, ingredients, directions) VALUES ($1, $2,$3)',
[req.body.name, req.body.ingredients, req.body.directions],function(err,resp)
{
if(err){
console.log(err)
}else{
return res.redirect('/');
}
});
};
controller.delete = (req, res) => {
pool.query('DELETE FROM RECIPES WHERE ID = $1', [req.params.id],function(err,resp){
if(err){
console.log(err)
}else{
return res.redirect('/');
}
});
}
module.exports = controller;
Или Вы также можете использовать async await, чтобы дождаться выполнения и затем отправить ответ.
Асинхронный / Await
const controller = {};
const { Pool } = require('pg');
var connectionString = 'postgres://me:system@localhost/recipebookdb';
const pool = new Pool({
connectionString: connectionString,
})
controller.list = async(request, response) => {
try{
const result = await pool.query('SELECT * FROM recipes');
return response.render('recipes', { data: result.rows });
}
catch(err){
return next(err);
}
};
controller.save = async(req, res) => {
try{
await pool.query('INSERT INTO recipes(name, ingredients, directions) VALUES ($1, $2,$3)',[req.body.name, req.body.ingredients, req.body.directions]);
return res.redirect('/');
}
catch(err){
return next(err);
}
};
controller.delete = async(req, res) => {
try{
await pool.query('DELETE FROM RECIPES WHERE ID = $1', [req.params.id]);
return res.redirect('/');
}catch(err){
console.log(err);
}
}
module.exports = controller;