Реализация обработки ошибок для API-запросов
На этом шаге мы сделаем наш API-вызов более надежным, реализовав надлежащую обработку ошибок. Запросы к API могут завершаться неудачно по различным причинам, таким как неправильный URL, проблемы с сетью или проблемы на стороне сервера. Крайне важно корректно обрабатывать эти потенциальные сбои, чтобы обеспечить лучший пользовательский опыт.
Важной деталью fetch API является то, что его промис не отклоняется при ошибках HTTP-статуса, таких как 404 (Not Found) или 500 (Internal Server Error). Он отклоняется только в случае сетевого сбоя, который препятствует завершению запроса. Для обработки HTTP-ошибок нам нужно проверить свойство response.ok, которое имеет значение true для успешных ответов (коды состояния 200-299).
Давайте обновим наш ~/project/index.js, чтобы проверять статус ответа и обрабатывать потенциальные ошибки.
Замените содержимое вашего файла ~/project/index.js следующим кодом. Мы добавляем проверку внутри первого блока .then().
const apiUrl = "https://jsonplaceholder.typicode.com/todos/1";
const outputElement = document.getElementById("data-output");
fetch(apiUrl)
.then((response) => {
// Проверяем, был ли ответ успешным.
// Свойство 'ok' — это булево значение, которое равно true, если код состояния находится в диапазоне 200-299.
if (!response.ok) {
// Если нет, мы выбрасываем ошибку, которая будет перехвачена блоком .catch().
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then((data) => {
outputElement.innerHTML = `
<p><strong>Title:</strong> ${data.title}</p>
<p><strong>Completed:</strong> ${data.completed}</p>
`;
})
.catch((error) => {
// Отображаем понятное пользователю сообщение об ошибке в HTML-элементе.
outputElement.textContent = "Failed to load data. Please try again later.";
// Записываем техническую ошибку в консоль для целей отладки.
console.error("Error fetching data:", error);
});
Чтобы увидеть нашу обработку ошибок в действии, намеренно используем неверный URL API. Измените apiUrl в ~/project/index.js, чтобы он указывал на несуществующий ресурс. Это приведет к тому, что API вернет ошибку 404 Not Found.
Измените эту строку в вашем файле index.js:
const apiUrl = 'https://jsonplaceholder.typicode.com/todos/1';
На эту:
const apiUrl = 'https://jsonplaceholder.typicode.com/invalid-path/1';
Теперь посмотрим на результат. Если ваш веб-сервер Python из предыдущего шага все еще запущен, просто обновите вкладку предварительного просмотра в браузере. Если вы его остановили, запустите его снова из терминала:
python3 -m http.server 8080
Затем откройте предварительный просмотр. Вместо данных вы должны увидеть сообщение об ошибке, отображаемое на странице, поскольку наша проверка if (!response.ok) перехватила ошибку 404.
Ожидаемый вывод на веб-странице:
Failed to load data. Please try again later.
Важно: Прежде чем переходить к следующему шагу, не забудьте изменить apiUrl обратно на правильный: https://jsonplaceholder.typicode.com/todos/1.