1.官网-安装
http://www.axios-js.com/zh-cn/docs/
npm install axios
2.统一封装类,新建src/http/index.ts
TypeScript
import axios from 'axios'
import { ElLoading } from 'element-plus'
import { ElMessage } from 'element-plus'
interface IResponseData<T> {
code: number,
message: string,
data: T
}
let loading:any;
class Http {
myAxios: any;
constructor(config: any) {
this.myAxios = axios.create(config);
// 添加请求拦截器
this.myAxios.interceptors.request.use(function (config:any) {
//显示loading层
loading = ElLoading.service({
lock: true,
text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)',
})
return config;
}, function (error:any) {
// 对请求错误做些什么
loading.close();
return Promise.reject(error);
});
// 添加响应拦截器
this.myAxios.interceptors.response.use(function (response:any) {
//关闭loading层
loading.close();
const {code,msg,data} = response.data
if(code === 0){
return data;
} else if (code == undefined){
return response;
} else if(code != 0){
ElMessage.error(msg)
return Promise.reject(msg);
}
}, function (error:any) {
// 对响应错误做点什么
loading.close();
return Promise.reject(error);
});
}
get<T>(url: string, params?: object, data = {}): Promise<IResponseData<T>> {
return this.myAxios.get(url, { params, ...data });
}
post<T>(url: string, params?: object, data = {}): Promise<IResponseData<T>> {
return this.myAxios.post(url, params, data);
}
put<T>(url: string, params?: object, data = {}): Promise<IResponseData<T>> {
return this.myAxios.put(url, params, data);
}
delete<T>(url: string, params?: object, data = {}): Promise<IResponseData<T>> {
return this.myAxios.delete(url, { params, ...data });
}
}
const config = {
baseURL: '',
timeout: 30 * 1000,
withCredentials: true,
}
export default new Http(config);
3..Proxy配置
在vite.config.ts 文件中
TypeScript
server: {
port: 5000, // 你需要定义的端口号
proxy: {
"/api": {
target: "Api地址",
changeOrigin: true,
},
},
},
4.使用方式
TypeScript
import http from "@/http/index";
onMounted(()=>{
http.get(
"/api/products"
)
.then((res: any) => {
tableData.value = res.data;
})
.catch((err: any) => {
console.log(err);
});
})