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.
 
 
 
 
 

63 lines
1.4 KiB

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);
}