Я пытаюсь сделать несколько запросов к базе данных и проверить некоторые данные. Если некоторые условия не совпадают, он должен создать ошибку и перейти к следующему (ошибка).
Проблема в том, что он отправляет мне ошибку в качестве ответа, но пытается продолжить. Итак, я получаю сообщение об ошибке в своем приложении node.js.
Purchase.findAndCount({where: {fk_product: productId, fk_buyer: req.decoded.id}}).then((numPurchases) => {
// product purchased?
if (numPurchases.count < 1) {
const errNotBought = new Error("you did not buy this product");
errNotBought.status = 403;
return next(errNotBought); // <--- it should break up here
}
}).then(() => {
res.send({status: true, data: 'product'}) // <-- stacktrace point this line
})
Ошибка: необработанное отклонение. Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту.





return возвращается только из текущей функции обратного вызова, он никак не останавливает цепочку промисов. Ты ищешь
Purchase.findAndCount({where: {fk_product: productId, fk_buyer: req.decoded.id}}).then(numPurchases => {
// product purchased?
if (numPurchases.count < 1) {
const errNotBought = new Error("you did not buy this product");
errNotBought.status = 403;
next(errNotBought); // <--- it should break up here
} else {
res.send({status: true, data: 'product'});
}
});
Это решение делает передает ошибку обработчику ошибок next, не так ли?
правильно! Спасибо. Другое возможное решение: throw new Error();
Да, throw errNotBought может быть даже более подходящим, так как он позволяет вам обрабатывать эту ошибку, а также ошибки из findAndCount в замыкающем .catch(), из которого вы могли бы вызвать next.
хорошо, это может быть решением, но у меня есть обработчик ошибок, куда я хочу передать ошибку. Вот почему я использую next для этого.