При запуске обработки ошибок происходит сбой приложения - PullRequest
0 голосов
/ 20 марта 2019

У меня есть маршрут.

router.post('/add', async (req, res) => {
    ...
    await timeIntervalCheck(req, res);
    ...
    return res.status(200).json({
        message: 'Product added'
    });
}):

В нем я вызываю функцию timeIntervalCheck

Вот сама функция:

function timeIntervalCheck(req, res) {
    let end_date = req.body.end_date;
    let starting_date = req.body.starting_date;
    let date = moment(end_date).diff(moment(starting_date), 'hours');
    if (date < 2 || date > 168) {
        return res.status(422).json({
            err: 'The product cannot be published for less than 2 hours and longer than 7 days'
        });
    }
}

Есливремя продукта соответствует периоду, все работает хорошо, но как только период меньше или больше, появляется ошибка Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client.

Я понимаю его таким, какой он есть, потому что заголовки уже отправлены, когда срок более или менее, и я продолжаю пытаться отправить их снова.Как я могу убедиться, что нет такой ошибки?Как отправить сообщение об ошибке, чтобы больше и не выдавать, что продукт добавлен

1 Ответ

1 голос
/ 20 марта 2019

Я предлагаю вам проверить результат из timeIntervalCheck и отправить правильный ответ.(или вы можете проверить res.headersent и прекратить посылать ответ дважды, но я не предпочитаю этот метод)

router.post('/add', async (req, res) => {
  ...
  let checkResult = timeIntervalCheck(req); // please note that only async function requires await flag
  ...
  if (checkResult === true) {
    return res.status(200).json({
     message: 'Product added'
    });
  } else {
    return res.status(422).json({
      err: 'The product cannot be published for less than 2 hours and longer than 7 days'
    });
  }
}):

-

function timeIntervalCheck(req, res) {
  let end_date = req.body.end_date;
  let starting_date = req.body.starting_date;
  let date = moment(end_date).diff(moment(starting_date), 'hours');
  if (date < 2 || date > 168) {
    return false;
  } else {
    return true;
  }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...