#node.js #express #mongoose #error-handling
#node.js #выражать #мангуст #обработка ошибок #экспресс
Вопрос:
Кто-нибудь знает, почему этот код выдает мне ошибку: «Не удается установить заголовки после их отправки клиенту»? Что-то не так с моими запросами Mongoose? Спасибо за вашу помощь!!
router.post('/setriskbydate', (req, res) => {
var username = req.body.username;
var from = new Date(req.body.from);
var to = new Date(req.body.to);
var dates = getDates(from, to);
User.findOne({ username: username }, (err, resp) => {
if (err) {
res.send(err);
}
if (resp) {
var rideIds = resp.ride;
for (let i = 0; i < rideIds.length; i ) {
Ride.findOne({ _id: rideIds[i] }, (error, response) => {
if (error) {
res.send(error)
}
if (response) {
var busnumber = response.busnumber
var date = response.date.split('T')[0];
if (dates.includes(date)) {
console.log(response);
Ride.updateMany({ busnumber: busnumber, date: { "$regex": date }}, { risk: "high" }, (er, re) => {
if (er) {
res.send(er);
}
if (re) {
res.send(re);
}
})
}
}
})
}
}
})
})
Комментарии:
1. Ваш код также должен выполняться даже после res.send(). Попробуйте использовать return res.send();
Ответ №1:
Убедитесь, что return
все ваши инструкции ответа не отправляются более одного раза, включая заголовки, которые нельзя установить снова после ответа.
return res.send(err);
...
return res.send(re);
Комментарии:
1. Здравствуйте, спасибо за ваш ответ, но я продолжаю получать сообщение об ошибке, и мой сервер выходит из строя… Я добавил оператор return перед каждым res.send().. Есть другие идеи?
Ответ №2:
Кажется, я понял.. Поскольку я нахожусь в цикле for, я не могу выполнить res.send(), потому что тогда функция завершается. Я просто заменил последний res.send() чем-то другим, и это сработало.