А зачем через 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 сработает.