import axios, { AxiosResponse } from 'axios'
import { AxiosRequestConfig } from 'axios'
const serviceAxios = axios.create({
baseURL: 'http://jsonplaceholder.typicode.com',
timeout: 5000,
})
serviceAxios.interceptors.response.use(
(response:AxiosResponse) => {
// response.headers['Access-Control-Allow-Origin'] = '*'
console.log(response);
if(response.status==200){
return response.data
}else{
return requestHandler
}
}
)
// interface axiosParams<T> extends AxiosResponse {
// data: T
// }
interface customDataParams<T> { //更具后端放回的字段定义
data: T,
message: string,
status: boolean
}
// type returnResponseType<T> = axiosParams<customDataParams<T>>
type methodType = 'get' | 'post' | 'put' | 'delete'
type paramsData<T> = {
params?: T,
data?: T
}
const RequestAxiosInstance = <T, P>(url: string, method: methodType, params: paramsData<P>|{}, config?: AxiosRequestConfig) => {
const data = serviceAxios<any, customDataParams<T>>({
url,
method,
...params,
...config,
})
return data
}
enum methodTypeMode {
get = 'get',
post = 'post',
put = 'put',
delete = 'delete',
}
const requestHandler = async <T, P>(url: string, method: methodType, paramsData?: P, config?: AxiosRequestConfig) => {
if (method === methodTypeMode.get || method === methodTypeMode.delete) {
return RequestAxiosInstance<T, P>(url, method, { params:{...paramsData} }, config)
} else {
return RequestAxiosInstance<T, P>(url, method, { data: paramsData }, config)
}
// return data;
}
// type returnData={
// name:string,
// age:18
// }
// type responseParams={
// username:string,
// password:string
// }
// const resultData=requestHandler<returnData,responseParams>("/user/login", "post", { username: "admin",password:"123456" })
export default requestHandler