res. json не отправляет мое сообщение об ошибке клиенту? - PullRequest
0 голосов
/ 20 июня 2020

У меня есть этот обработчик ошибок, который возвращает определенные c сообщения об ошибках в зависимости от того, что происходит. Но дело в том, что когда я запускаю свою функцию обработчика ошибок с помощью .catch (), она будет работать, если я вхожу в консоль узла, но когда я попытаюсь отправить ее клиенту через res. json (), она отправит только код состояния, а не какая-либо часть моего обработчика ошибок.

function errorHandler(error){
  if (error.name === 'SequelizeValidationError') {
    const errors = error.errors.map(err => err.message);
    return errors;
  } else {
    throw error;
  }
}


router.post('/create', async(req, res) => {
     await Movie.create(req.body)
      .then(() => res.json("Movie Created"))
      .catch( err => res.status(401).json(errorHandler(err)) );
  });

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

Спасибо!

1 Ответ

2 голосов
/ 20 июня 2020

Потому что он не ждет результата от errorHandler. Заставьте их этого дождаться. Попробуйте это.

function errorHandler(error, cb){
  if (error.name === 'SequelizeValidationError') {
    const errors = error.errors.map(err => err.message);
     cb(errors);
  } else {
    throw error;
  }
}


router.post('/create', async(req, res) => {
     await Movie.create(req.body)
      .then(() => res.json("Movie Created"))
      .catch( err => {
              errorHandler(err, function(errors){
                   res.status(401).json(errors);
               });
      });
  })

Или вы можете вернуть Promise и ждать в errorHandler.

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