You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
import Axios, {AxiosError, AxiosRequestConfig, AxiosResponse} from "axios";
interface Response<T> { code: number message: string data: T }
export async function getRequest<T>(url: string): Promise<T> { return sendRequest<T>({ method: "GET", url: `/api${url}`, responseType: "json", }); }
export function postRequest<T>(url: string, data: object = {}): Promise<T> { return sendRequest<T>({ method: "POST", url: `/api${url}`, responseType: "json", data, }); }
export function putRequest<T>(url: string, data: object): Promise<T> { return sendRequest<T>({ method: "PUT", url: `/api${url}`, responseType: "json", data, }); }
export function deleteRequest<T>(url: string): Promise<T> { return sendRequest<T>({ method: "DELETE", url: `/api${url}`, responseType: "json", }); }
async function sendRequest<T>(config: AxiosRequestConfig): Promise<T> { try { const res = await Axios(config);
return await handleResponse(res); } catch (e) { return await handleResponse((e as AxiosError).response as AxiosResponse); } }
function handleResponse<T>(response: AxiosResponse): Promise<T> { const obj: Response<T> = response.data;
if (![200, 201].includes(response.status)) { if (response.status === 403) { return Promise.reject(obj.message); } }
return Promise.resolve(obj.data); }
|