Обработка серверных ошибок

Unpoly предоставляет мощный механизм для построения интерактивных веб-приложений, минимизируя необходимость полной перезагрузки страницы. При этом, как и в любом современном веб-приложении, важно грамотно обрабатывать возможные ошибки, возникающие на сервере. Правильная обработка ошибок позволяет не только информировать пользователя о проблемах, но и обеспечивать стабильность и безопасность взаимодействия.

Обработка ошибок HTTP

Unpoly работает с запросами к серверу через AJAX, что позволяет гибко управлять процессом получения данных. Ошибки, которые могут возникать при взаимодействии с сервером, можно классифицировать по коду статуса HTTP-ответа.

Ошибки 4xx (клиентские ошибки)

Клиентские ошибки, такие как 404 Not Found, 403 Forbidden или 400 Bad Request, сигнализируют о том, что что-то не так с запросом клиента. Unpoly позволяет обработать эти ошибки через callback-функции и настроить поведение страницы в случае возникновения ошибок.

Пример:

up.on('up:error', function(event, error) {
  if (error.status === 404) {
    // Обработка ошибки 404
    alert('Запрашиваемая страница не найдена');
  } else if (error.status === 403) {
    // Обработка ошибки 403
    alert('У вас нет доступа к этому ресурсу');
  }
});

Ошибки 5xx (серверные ошибки)

Ошибки 5xx, такие как 500 Internal Server Error, означают, что проблема возникла на сервере. Эти ошибки чаще всего связаны с неправильной настройкой сервера или сбоем в работе серверных приложений. Unpoly предоставляет механизм для централизованной обработки таких ошибок и возможности показать пользователю уведомление или сообщение о сбое.

Пример:

up.on('up:error', function(event, error) {
  if (error.status >= 500 && error.status < 600) {
    // Обработка серверных ошибок
    alert('Произошла ошибка на сервере. Попробуйте позже.');
  }
});

Обработка ошибок с кастомными сообщениями

В некоторых случаях сервер может возвращать не просто код ошибки, но и дополнительную информацию о проблеме в теле ответа. Unpoly позволяет обрабатывать такие ответы и выводить сообщения для пользователей. Например, сервер может вернуть объект JSON с полем message, в котором указано описание ошибки.

Пример обработки ошибок с кастомными сообщениями:

up.on('up:error', function(event, error) {
  if (error.status === 400 && error.responseJSON && error.responseJSON.message) {
    // Вывод кастомного сообщения об ошибке
    alert('Ошибка: ' + error.responseJSON.message);
  } else {
    alert('Неизвестная ошибка');
  }
});

Работа с ошибками при отправке форм

Одной из частых задач является обработка ошибок, возникающих при отправке форм. Unpoly позволяет использовать AJAX-запросы для отправки данных и получения ответов, что требует обработки возможных ошибок при валидации данных на сервере.

Пример:

$('#myForm').on('submit', function(event) {
  event.preventDefault();
  up.submit(this, {
    success: function(response) {
      alert('Форма успешно отправлена');
    },
    error: function(event, xhr) {
      if (xhr.status === 400) {
        alert('Некорректные данные. Пожалуйста, исправьте ошибки.');
      }
    }
  });
});

Глобальная обработка ошибок

Unpoly предоставляет возможность настроить глобальную обработку ошибок, которая будет перехватывать все ошибки, возникающие при работе с библиотекой. Это позволяет централизованно управлять ошибками и обеспечивать единую стратегию обработки для всего приложения.

Пример глобальной обработки:

up.on('up:error', function(event, error) {
  console.error('Произошла ошибка: ', error);
  // Можете отправить ошибку на сервер для анализа или отправить уведомление
});

Перехват ошибок и настройка поведения

Unpoly позволяет перехватывать ошибки на более низком уровне, а также изменять поведение в зависимости от типа ошибки. Это может быть полезно, если необходимо изменить интерфейс, например, отобразить спиннер загрузки, скрыть кнопки или очистить форму.

Пример:

up.on('up:before-request', function(event) {
  // Показываем индикатор загрузки
  $('#loadingIndicator').show();
});

up.on('up:request-finish', function(event) {
  // Скрываем индикатор загрузки после завершения запроса
  $('#loadingIndicator').hide();
});

up.on('up:error', function(event, error) {
  // Если ошибка была, показываем уведомление
  $('#errorNotification').text('Произошла ошибка: ' + error.statusText).show();
});

Перенаправление при ошибке

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

Пример перенаправления при ошибке:

up.on('up:error', function(event, error) {
  if (error.status === 401) {
    // Перенаправление на страницу авторизации
    window.location.href = '/login';
  } else if (error.status === 500) {
    // Перенаправление на страницу ошибки
    window.location.href = '/error';
  }
});

Обработка ошибок при загрузке данных

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

Пример загрузки данных с обработкой ошибок:

up.request('/data', {
  success: function(response) {
    // Обработка успешного ответа
    console.log('Данные загружены: ', response);
  },
  error: function(event, error) {
    if (error.status === 404) {
      alert('Данные не найдены');
    } else {
      alert('Ошибка загрузки данных');
    }
  }
});

Интеграция с серверной валидацией

Когда приложение использует серверную валидацию, необходимо корректно обрабатывать ошибки валидации, которые могут быть возвращены сервером. Сервер может возвращать ошибки, связанные с неверно введёнными данными или другими проблемами. Unpoly позволяет интегрировать такие ошибки в UI, чтобы пользователи могли легко их исправить.

Пример:

$('#myForm').on('submit', function(event) {
  event.preventDefault();
  up.submit(this, {
    success: function(response) {
      // Данные успешно обработаны
    },
    error: function(event, xhr) {
      if (xhr.status === 422) {
        // Обработка ошибок валидации
        var errors = xhr.responseJSON.errors;
        for (var field in errors) {
          $('#' + field + '_error').text(errors[field].join(', '));
        }
      }
    }
  });
});

Завершение процесса с ошибкой

Когда ошибка возникла в процессе запроса, важно правильно завершить обработку. Это включает в себя отмену каких-либо дальнейших действий и возврат приложения в стабильно функционирующее состояние. Unpoly предоставляет API для обработки такого завершения, позволяя пользователю вернуться в прежнее состояние интерфейса.

Пример завершения процесса с ошибкой:

up.on('up:error', function(event, error) {
  // Восстановление состояния интерфейса
  $('#spinner').hide();
  $('#retryButton').show();
});

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