← Назад к вопросам
Как глобально перехватываешь ошибки от Backend через Axios?
2.0 Middle🔥 201 комментариев
#JavaScript Core#Архитектура и паттерны#Браузер и сетевые технологии
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как глобально перехватываешь ошибки от Backend через Axios?
Response Interceptor для ошибок
Перевхватываем ошибки на уровне HTTP ответа:
const apiClient = axios.create({
baseURL: "https://api.example.com"
});
apiClient.interceptors.response.use(
response => response,
error => {
if (error.response?.status === 401) {
window.location.href = "/login";
} else if (error.response?.status === 403) {
console.error("Access denied");
} else if (error.response?.status === 500) {
console.error("Server error");
}
return Promise.reject(error);
}
);
Обработка по статусам
apiClient.interceptors.response.use(
response => response,
error => {
const status = error.response?.status;
const message = error.response?.data?.message || error.message;
switch (status) {
case 400:
console.error("Bad Request");
break;
case 401:
redirectToLogin();
break;
case 403:
showNotification("No access");
break;
case 404:
showNotification("Not found");
break;
case 500:
showNotification("Server error");
break;
}
return Promise.reject(error);
}
);
Request Interceptor для токена
apiClient.interceptors.request.use(
config => {
const token = localStorage.getItem("authToken");
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
}
);
Retry логика
import axiosRetry from "axios-retry";
axiosRetry(apiClient, {
retries: 3,
retryDelay: axiosRetry.exponentialDelay,
retryCondition: error =>
error.response?.status === 503 || !error.response
});
Custom Error Class
class ApiError extends Error {
constructor(public status: number, public message: string) {
super(message);
this.name = "ApiError";
}
}
apiClient.interceptors.response.use(
response => response,
error => Promise.reject(
new ApiError(
error.response?.status || 0,
error.response?.data?.message || error.message
)
)
);
Полный пример
const apiClient = axios.create({
baseURL: process.env.REACT_APP_API_URL,
timeout: 10000
});
// Добавление токена
apiClient.interceptors.request.use(config => {
const token = localStorage.getItem("authToken");
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
// Обработка ошибок
apiClient.interceptors.response.use(
response => response,
error => {
const status = error.response?.status;
if (status === 401) {
localStorage.removeItem("authToken");
window.location.href = "/login";
}
console.error(`API Error [${status}]`);
return Promise.reject(error);
}
);
export default apiClient;
Преимущества
- Обработка ошибок в одном месте
- Автоматическое добавление токена ко всем запросам
- Глобальное логирование
- Retry для временных ошибок
- Перенаправление при 401 (неавторизированный доступ)
- Единообразная обработка ошибок во всем приложении