не падало? Нужно в каждом методе, где, например, запрос в базу есть, отлавливать потенциальные ошибки, или можно сделать отлов ошибок где-то в одном месте?
Добавь ещё один миддлвар, после основного роутинга. Если через next прокидываешь ошибку, туда придёт. Только коллбек с 4мя аргументами
а если у меня найдется место, в котором неожиданно вылезла ошибка (или я не доглядел, что нужно её обработать\пробросить), то поможет ли это не упасть приложению? сейчас попробовал так обратиться к монге за файлом, который я уже удалил, при этом приложение упало с ошибкой что файл не найден
В промисе на .catch(next). Ошибка должна туда улететь
у тебя же запросы базу через промисы, ну или коллбеки. Когда вызываешь next и кидаешь туда первым аргументом что-то (объект ошибки например), по трубе до последнего миддлавара должно дойти
Любой асинхронный кол должен быть врапнут в try catch. В зависимости от ошибки нужно генерировать код ответа. Нельзя отвечать 404 когда не найдено чего то и когда база упала. В вашем примере так и будет.
Вот тут
у меня каждый запрос отлавливает ошибку, и, если она есть, то отправляет ответ со статусом 500\40* соответственно. Вопрос скорее как "обернуть всё приложение в try\catch", чтобы если ошибка каста строки в число не роняла приложение
например так: router.post("/", authSrv.validateJWTToken, validatorSrv.exchange, errorHandle(exchangeCtrl.exchange)); exchangeCtrl.exchange - это обработчик запроса, который передаеться аргументом у функции errorHandle Ну и сама функция может быть до боли простой: export const errorHandle = handler => async (req, res, next) => { try { await handler(req, res, next); } catch (e) { generateHttpError(res, e, next); } };
Обсуждают сегодня