/
NeGaTiVe333
/
Frontend
Обзор
Документация
Войти
/
NeGaTiVe333
/
Frontend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/api/client.ts
56 строк
2 KB
NeGaTiVe369
feat: готовый проект
05 дек 2025, 18:59
05 дек 2025, 18:59
ac252ce
Код
Авторство
О чём код?
import axios from "axios"; import { clearToken } from "../auth/storage"; const api = axios.create({ baseURL: "/", }); // Добавляем токен из localStorage, если он есть api.interceptors.request.use((config) => { const token = localStorage.getItem("token"); if (token && config.headers) { config.headers.Authorization = `Bearer ${token}`; } return config; }); // Глобальная обработка ошибок api.interceptors.response.use( (response) => response, (error) => { if (!error.response) { // например, нет сети console.error("Network or CORS error", error); alert("Проблема с сетью или сервер недоступен"); return Promise.reject(error); } const { status, headers, data } = error.response; if (status === 401) { // Неавторизован — чистим токен и уводим на логин clearToken(); if (window.location.pathname !== "/login") { alert("Сессия истекла или токен недействителен. Войдите снова."); window.location.href = "/login"; } } if (status === 429) { // Перегрузка по лимиту запросов const retryAfter = headers["retry-after"]; let msg = "Слишком много запросов. Попробуйте чуть позже."; if (retryAfter) { msg += ` Рекомендуется подождать ${retryAfter} секунд.`; } alert(msg); } // Можно залогировать тело ошибки для отладки console.error("API error:", status, data); return Promise.reject(error); } ); export default api;