Если вы pool.query()
сталкиваетесь с ошибкой, то вы дважды позвоните res.send()
:
router.delete("/:idModelo", function(req, res, next) {
const id = req.params.idModelo;
const sql = `DELETE * FROM Modelo WHERE idModelo=${id}`;
pool.query(sql, function(err, row, fields) {
if (err) {
res.status(500).send({ error: "Something failed!" }); // first time res.send()
}
res.send("Deleted"); // second time res.send()
});
});
Помните, что хотя res.send()
завершает HTTP-ответ, он не останавливает элемент управления поток в Javascript. Если в вашей функции есть дополнительный код для выполнения, он все равно будет работать. Итак, вам нужно либо if/else
, либо return
, чтобы остановить запуск res.send("Deleted")
после того, как вы обнаружили ошибку. Вот return
.
router.delete("/:idModelo", function(req, res, next) {
const id = req.params.idModelo;
const sql = `DELETE * FROM Modelo WHERE idModelo=${id}`;
pool.query(sql, function(err, row, fields) {
if (err) {
res.status(500).send({ error: "Something failed!" });
return; // <=== add this
}
res.send("Deleted");
});
});
А вот if/else
:
router.delete("/:idModelo", function(req, res, next) {
const id = req.params.idModelo;
const sql = `DELETE * FROM Modelo WHERE idModelo=${id}`;
pool.query(sql, function(err, row, fields) {
if (err) {
res.status(500).send({ error: "Something failed!" });
} else {
res.send("Deleted");
}
});
});
Если вы думаете, что «Невозможно установить заголовки после того, как они отправлены клиенту», ошибка возникающих в тех случаях, когда не было ошибки pool.query()
, тогда должен быть какой-то другой код (возможно, промежуточное программное обеспечение), который также отправляет ответ, и мы должны увидеть этот код, чтобы помочь вам разобраться с этим.