import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from "@ohos/axios"
import { logger } from "./Logger"
const baseURL = 'https://api-harmony-teach.itheima.net'
//1.创建AXIOS的实例对象
//配置基地址,超时时间
//create 创建一个新的Axios对象 可以多个接口使用
export const instance =axios.create({
baseURL,
timeout:6000
})
//2.配置请求拦截器 (前端给后端的东西)
instance.interceptors.request.use((config:InternalAxiosRequestConfig)=>{
const user = auth.getUser()
if(user.token){
config.headers.Authorization = `Bearer ${ user.token}`
}
return config
},(err: AxiosError) => {
logger.error('Req Error', JSON.stringify(err))
return Promise.reject(err)
})
//3.配置响应拦截器 后端给前端的东西
// instance.interceptors.response.use(()=>{成功} ,()=>{失败})
//拦截器interceptors
//response通常指的是网络请求的响应。这是一个结构体,用于封装服务器返回的信息,
//AxiosResponse是Axios库中的一个接口,用于表示HTTP响应。以便开发者可以轻松地访问响应的各个部分。
instance.interceptors.response.use((res: AxiosResponse) => {
//成功
if (res.data.code === 10000) {
logger.debug('Req Success', JSON.stringify(res.data.data))
return res.data.data
}
//请求成功,回传是错误的
logger.error('Req Error', JSON.stringify(res.data))
return Promise.reject(res.data)
}, (err: AxiosError) => {
//失败返回的错误
logger.error('Req Error', JSON.stringify(err))
return Promise.reject(err)
})
//4.封装Htpp类
// 提供request方法
class Http {
// Get 请求可以省略第二个泛型,因为axios默认是any任何值可传
//ResponseData 响应数据类型 返回的数据(响应回来的数据)
//RequestData 请求数据类型 请求携带的参数
//Object 给个默认值 有的是入参
//AxiosResponse是Axios库中的一个接口,用于表示HTTP响应。以便开发者可以轻松地访问响应的各个部分。
// request<T,D>
//T是自己的,D是请求得到
request<ResponseData, RequestData = Object>(config: AxiosRequestConfig<RequestData>) {
return instance<null, ResponseData, RequestData>(config)
}
}
//5.创建并导出 http实例对象
export const http = new Http()
|