Страница не должна падать! Как правильно обрабатывать ошибки в веб-приложениях?

пт, 4 апреля 2025 г. - 3 мин чтения
Уведомление об ошибке в приложении

Страница всегда должна быть доступной и живой! Как правильно обрабатывать ошибки в веб-приложениях

Что делает сайт хорошим? Быстрая работа, удобный интерфейс, стабильность. Но даже самые лучшие сервисы иногда ломаются. Вопрос не в том, будут ли ошибки, а в том, как вы их обработаете.

Грамотная обработка ошибок — это не просто технический долг. Это:

  • Защита пользовательского опыта (UX),
  • Повышение доверия к продукту,
  • Улучшение показателей SEO и конверсии,
  • Возможность быстро и легко разобраться в причине ошибке.

💥 Почему обработка ошибок критична

Представьте: пользователь заходит на страницу, и… “Ошибка 500”, или вовсе пустой экран. Без пояснений. Без кнопки “назад”. Без надежды.

Такой опыт:

  • раздражает,
  • вызывает сомнения в качестве продукта,
  • приводит к уходу пользователя,
  • ухудшает поведенческие факторы, влияющие на поисковое ранжирование.

✅ Основные принципы обработки ошибок

1. Всегда уведомляйте пользователя об ошибке

Не молчите! Лучше плохое объяснение, чем тишина. Используйте:

  • 🔹 Попапы (всплывающие уведомления),
  • 🔹 Баннеры вверху страницы,
  • 🔹 Inline-сообщения в контексте (например, “Не удалось загрузить комментарии”).

2. Пишите понятные и дружелюбные сообщения

Не надо технических страшилок вроде:

Unhandled exception at line 238: Cannot read property ‘map’ of undefinedВ

Гораздо лучше:

❌ Ой! Не удалось загрузить информацю о бонусах. Попробуйте обновить страницу или зайдите позже.

3. Добавляйте код ошибки или ID события

Это поможет:

  • Пользователю — понять, что вы в курсе,
  • Поддержке — быстро найти и исправить баг.

Пример:

⚠️ ❌ Ой! Не удалось загрузить информацию о заказах. Попробуйте обновить страницу или зайдите позже. id ошибки - 647565!


🚫 Примеры плохого и хорошего UX при ошибках

❌ Как НЕ надо:

  • Сообщение: Ошибка 500
  • Ничего не работает, белый экран
  • Нет обратной связи

✅ Как НАДО:

  • Сообщение: “Что-то пошло не так. Мы уже знаем о проблеме и исправляем её. Код ошибки: #98765”
  • Интерфейс продолжает работать частично
  • Есть возможность вернуться или обновить страницу

🧰 ОЧЕНЬ ВАЖНО!!!

🔧 Делайте индивидуальный текст ошибки на каждый сценарий возможного падения сайта:

  • Если упал сервис промокодов - так и пишите:

    ⚠️ ❌ Ой! Не удалось загрузить информацию о промокодах. Попробуйте обновить страницу или зайдите позже. id ошибки - 647565!

  • Если упал сервис заказов:

    ⚠️ ❌ Ой! Не удалось загрузить информацию о заказах. Попробуйте обновить страницу или зайдите позже. id ошибки - 647565! Или напишите нам в поддержку.

  • Если не загрузился контент:

    ⚠️ ❌ Ой! Не удалось загрузить информацию для отображения страницы. Попробуйте обновить страницу или зайдите позже. id ошибки - 647565! Или напишите нам в поддержку. Приложите скриншот или отправьте нам номер ошибки”

    💡 Если у каждого запроса будет уникальное сообщение об ошибке, вы как разработчик или владелец своего приложения - быстрее поймёте, что именно сломалось и сможете быстро решить проблему.


🧰 Технические советы

🔧 На фронтенде:

  • Используйте try { ... } catch (error) { ... } для API-запросов
  • В React — применяйте Error Boundaries, чтобы не падал весь компонент:
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;
	}
}
  • Опциональный chaining (?.)
// Вместо user.address.street →
const street = user?.address?.street || 'Не указана';
 
// Для методов:
const result = api.getData?.().catch(handleError);
  • Fallback-значения через ?? and ||
// 0, если null/undefined
const price = product?.price ?? 0;
// Пустая строка → 'Гость'
const name = user?.name || 'Гость';

📝 Вывод

Хорошая обработка ошибок — это:

  • 📢 Понятные сообщения пользователю,
  • 🧩 Сохраняемый интерфейс,
  • 🛠️ Возможность быстро отследить проблему,
  • 💡 Повышение доверия,
  • 📈 Улучшение SEO.