FPSMS-frontend
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

57 строки
1.4 KiB

  1. import axios from "axios";
  2. const axiosInstance = axios.create({
  3. baseURL: process.env.API_URL,
  4. });
  5. // Clear existing interceptors to prevent multiple registrations
  6. const clearInterceptors = () => {
  7. const requestInterceptor = axiosInstance.interceptors.request.use();
  8. const responseInterceptor = axiosInstance.interceptors.response.use();
  9. if (requestInterceptor) {
  10. axiosInstance.interceptors.request.eject(requestInterceptor);
  11. }
  12. if (responseInterceptor) {
  13. axiosInstance.interceptors.response.eject(responseInterceptor);
  14. }
  15. };
  16. export const SetupAxiosInterceptors = (inputToken: string | null) => {
  17. console.log("[debug] set up interceptors", inputToken);
  18. // Clear existing interceptors
  19. clearInterceptors();
  20. // Request interceptor
  21. axiosInstance.interceptors.request.use(
  22. (config) => {
  23. // Use the token passed in or retrieve from localStorage
  24. const token = inputToken ?? localStorage.getItem("accessToken");
  25. if (token) {
  26. config.headers.Authorization = `Bearer ${token}`;
  27. }
  28. return config;
  29. },
  30. (error) => {
  31. return Promise.reject(error);
  32. },
  33. );
  34. console.log("[debug] set up interceptors2", inputToken);
  35. // Response interceptor
  36. axiosInstance.interceptors.response.use(
  37. (response) => {
  38. return response;
  39. },
  40. (error) => {
  41. console.error("API Error:", error.response?.data || error);
  42. return Promise.reject(error);
  43. },
  44. );
  45. };
  46. export default axiosInstance;