@Pogran

Как сделать обработку ошибок через axios последний?

К примеру я отправляю запрос на адрес через axios
axios.post('/api/users', {username: ''});

обработчик выглядит у меня вот так
let router = express.Router();

function validateInput(data) {
    let errors = {};

    if(Validator.isNull(data.username)) {
        errors.username = 'This field is required';
    }

    return {
        errors,
        isValid: isEmpty(errors)
    }
}

router.post('/', (req, res) => {
    const {errors, isValid} = validateInput(req.body);

    if(!isValid) {
        res.status(400).json(errors);
    }
});

export default router;


Как данный обработчик сделать через Promise и вернуть грамотно результат. А затем в axios через then(получить ответ успешный) и catch(получить ошибки)

используется axios последний
  • Вопрос задан
  • 4091 просмотр
Решения вопроса 1
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
А зачем через Promise? У вас обычный синхронный код проверки и все. Пусть будет:
...
router.post('/', (req, res) => {
    const {errors, isValid} = validateInput(req.body);

    if(!isValid) {
        return res.status(400).json(errors);
    } else {
        return res.status(200).json({data: 'bla-bla-bla'})
    }
});
...


Ну а сам axios заранее "промисифицированный". Взял пример из документации:

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });


Если я вас правильно понял, то вы хотели бы использовать then/catch у axios, но думаете, что если роутер экспресса не возвращает promise - это невозможно? Нет, это не так.

Если вернет ошибку - выполнится catch, если вернет "ок" - выполнится then. Не могу сказать по памяти, но res.status(400) может сработать как then, потому что вернуто не "ошибочное" значение. Тогда просто вместо res.status(400) бросьте исключение (типа new Error ...) и тогда точно catch сработает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы