Страница не должна падать! Как правильно обрабатывать ошибки в веб-приложениях?
Что делает сайт хорошим? Быстрая работа, удобный интерфейс, стабильность. Но даже самые лучшие сервисы иногда ломаются. Вопрос не в том, будут ли ошибки, а в том, как вы их обработаете.
Грамотная обработка ошибок — это не просто технический долг. Это:
Представьте: пользователь заходит на страницу, и… “Ошибка 500”, или вовсе пустой экран. Без пояснений. Без кнопки “назад”. Без надежды.
Такой опыт:
Не молчите! Лучше плохое объяснение, чем тишина. Используйте:
Не надо технических страшилок вроде:
Unhandled exception at line 238: Cannot read property ‘map’ of undefinedВ
Гораздо лучше:
❌ Ой! Не удалось загрузить информацю о бонусах. Попробуйте обновить страницу или зайдите позже.
Это поможет:
Пример:
⚠️ ❌ Ой! Не удалось загрузить информацию о заказах. Попробуйте обновить страницу или зайдите позже. id ошибки - 647565!
Ошибка 500
Если упал сервис промокодов - так и пишите:
⚠️ ❌ Ой! Не удалось загрузить информацию о промокодах. Попробуйте обновить страницу или зайдите позже. id ошибки - 647565!
Если упал сервис заказов:
⚠️ ❌ Ой! Не удалось загрузить информацию о заказах. Попробуйте обновить страницу или зайдите позже. id ошибки - 647565! Или напишите нам в поддержку.
Если не загрузился контент:
⚠️ ❌ Ой! Не удалось загрузить информацию для отображения страницы. Попробуйте обновить страницу или зайдите позже. id ошибки - 647565! Или напишите нам в поддержку. Приложите скриншот или отправьте нам номер ошибки”
try { ... } catch (error) { ... }
для API-запросовclass ErrorBoundary extends React.Component {
state = { hasError: false };
static getDerivedStateFromError(error) {
return { hasError: true };
}
render() {
if (this.state.hasError) {
return <h2>Что-то пошло не так.</h2>;
}
return this.props.children;
}
}
?.
)// Вместо user.address.street →
const street = user?.address?.street || 'Не указана';
// Для методов:
const result = api.getData?.().catch(handleError);
??
and ||
// 0, если null/undefined
const price = product?.price ?? 0;
// Пустая строка → 'Гость'
const name = user?.name || 'Гость';
Хорошая обработка ошибок — это: