Presupuestador_web/client/src/lib/axios/setupInterceptors.ts

105 lines
2.7 KiB
TypeScript
Raw Normal View History

2024-06-06 11:05:54 +00:00
import {
AxiosError,
AxiosInstance,
AxiosResponse,
InternalAxiosRequestConfig,
} from "axios";
//use(onFulfilled?: ((value: V) => V | Promise<V>) | null,
//onRejected?: ((error: any) => any) | null, options?: AxiosInterceptorOptions): number;
const onRequest = (
request: InternalAxiosRequestConfig
): InternalAxiosRequestConfig => {
/*console.group("[request]");
console.dir(request);
console.groupEnd();*/
return request;
};
const onRequestError = (error: AxiosError): Promise<AxiosError> => {
/*console.group("[request error]");
console.dir(error);
console.groupEnd();*/
return Promise.reject(error);
};
const onResponse = (response: AxiosResponse): AxiosResponse => {
console.group("[response]");
console.dir(response);
console.groupEnd();
const config = response?.config;
if (config.raw) {
return response;
}
/*if (response.status === 200) {
const data = response?.data;
if (!data) {
throw new HttpError("API Error. No data!");
}
return data;
}*/
//throw new HttpError("API Error! Invalid status code!");
return response;
};
const onResponseError = (error: AxiosError): Promise<AxiosError> => {
console.group("[response error]");
console.log(error);
if (error.response) {
// La respuesta fue hecha y el servidor respondió con un código de estado
// que esta fuera del rango de 2xx
console.log("1 => El servidor respondió con un código de estado > 200");
console.log(error.response.data);
console.log(error.response.status);
switch (error.response.status) {
case 400:
console.error("Bad Request");
break;
case 401:
console.error("UnAuthorized");
break;
case 403:
console.error("Forbidden");
break;
/*AppEvents.publish(Events.N_Error, {
message: "Forbidden",
description: "Operation ",
});*/
case 404:
console.error("Not found");
break;
case 422:
console.error("Unprocessable Content");
throw error.response.data;
}
console.error(error.response.status);
} else if (error.request) {
// La petición fue hecha pero no se recibió respuesta
console.log("2 => El servidor no respondió");
console.error(error);
} else {
// Algo paso al preparar la petición que lanzo un Error
console.log("3 => Error desconocido");
console.error(error);
}
console.groupEnd();
throw error;
};
export function setupInterceptorsTo(
axiosInstance: AxiosInstance
): AxiosInstance {
axiosInstance.interceptors.request.use(onRequest, onRequestError);
axiosInstance.interceptors.response.use(onResponse, onResponseError);
return axiosInstance;
}