Экспресс-запрос mongoose не может установить заголовки

#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() чем-то другим, и это сработало.