下载APP

myAxios


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
在线举报