vue3统一封装axios
1.在src下新建文件夹apis 在apis下新建一个index.ts
2.在index.ts添加
import axios from 'axios';
export const httpInstance = axios.create();
3.在终端输入 npm run lint 确定文件没有问题
4.定义并导出一个后端的数据类型
export type BkResponse = {
data: any;
code: number;
message: string;
succeed: true;
};
5.设置请求根路径(VITE_BASEURL是.env.dev下的)
6.响应拦截器
意义:响应拦截器发送请求后接收到服务器响应之前的一个拦截器,它可以对服务器返回的数据进行统一的处理(如:对返回的数据进行格式化、错误处理、权限验证等)
如果在这里不进行统一的处理之后我们每发一次请求都要处理一次,非常麻烦,这是一直优化代码的表现
//配置相应拦截器
export const $http = async (config: AxiosRequestConfig) => {
//封装带loading的请求
const loadingInstance = ElLoading.service();
try {
const axiosResponse = await httpInstance<BkResponse>(config);
const bkResponse = axiosResponse.data
if (!bkResponse?.succeed) {
let errTitle: string = 'Error';
if (bkResponse.code === 401) {
errTitle = 'Unauthorized'
ElMessage.error('未授权')
} else if (bkResponse.code === 403) {
errTitle = 'Forbidden'
}
else if (bkResponse.code === 9999) {
errTitle = '9999Error'
} else if (bkResponse.code === 500) {
errTitle = 'ServerError'
} else {
errTitle = 'Unknown'
}
const err = new Error(bkResponse?.message || 'Unknown');
err.name = errTitle
throw err;
}
return bkResponse
} catch (err) {
if (err instanceof AxiosError) {
ElMessage.error('网络错误')
}
throw err;
}
finally{
loadingInstance.close();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通