項(xiàng)目中Axios二次封裝實(shí)例Demo
1.為什么做封裝?
方便代碼整體調(diào)用、對請求做公共處理、個(gè)性化定制
2.別人已經(jīng)封裝了很多,為什么不直接修改使用?
- 封裝思路不適合自身項(xiàng)目
- 封裝后調(diào)用不方便
3.個(gè)人封裝demo
代碼結(jié)構(gòu)【基于vue】

基本思路
將所有的請求接口地址按照文件分模塊存儲,比如 request/module/user 用戶信息相關(guān)模塊【服務(wù)】


2.封裝方法、類。給所有請求綁定常用的請求方法,和對請求url上的路徑參數(shù)做處理
generateServer.js
import server from "../util/axiosConfig";
// 修改axios基本配置,請求配置
function request({
url,
method = "get",
queryParm = {},
body = {},
pathParm = null,
config = {},
}) {
const configAxios = {
method,
...config,
url: dealRequestUrl(url, pathParm),
};
switch (method) {
case "get":
configAxios.params = queryParm;
break;
default:
// 請求方法 'PUT', 'POST', 和 'PATCH'
configAxios.data = body;
break;
}
console.log('configAxios', configAxios)
return server(configAxios);
}
function dealRequestUrl(url, pathParm) {
if (!pathParm) return url;
let dealurl = url;
Object.keys(pathParm).forEach((ele) => {
dealurl = dealurl.replace(`{${ele}}`, pathParm[ele]);
});
return dealurl;
}
class GenerateServer {
constructor(url) {
this.url = url;
}
getdata(parm) {
console.log('parm', parm)
return request({ ...parm, method: "get", url: this.url });
}
postdata(parm) {
return request({ ...parm, method: "post", url: this.url });
}
deletedata(parm) {
return request({ ...parm, method: "delete", url: this.url });
}
}
export default GenerateServer;
3.整體暴露出去

使用
import { userInfoServer } from "./request";
.
.
.
// 發(fā)送請求
userInfoServer.getUserName
.getdata({
queryParm: {
id: 223,
},
})
.then((res) => {
console.log("res", res);
});
// 發(fā)送請求
userInfoServer.getUserName
.postdata({
body: {
id: 223,
},
})
.then((res) => {
console.log("res", res);
});
// 發(fā)送get請求,請求路徑帶參數(shù)
userInfoServer.getUserList
.getdata({
queryParm: {
id: 223,
},
pathParm: {
id: 567,
},
})
.then((res) => {
console.log("res", res);
});
總結(jié):
上述的封裝,主要是對請求拆分比較細(xì)致,便于維護(hù)。開發(fā)時(shí)也比較方便。對于新接口需求,只需要在對應(yīng)模塊增加URl配置和響應(yīng)的生成器配置。便可以在業(yè)務(wù)代碼里面處理請求。對于路徑參數(shù)和請求體參數(shù)做了封裝,使用時(shí)不需要關(guān)心相應(yīng)的配置。
上述代碼沒有處理文件上傳、get請求參數(shù)字符串等情況。但是在對應(yīng)的axios里面增加配置即可。維護(hù)方便。
到此這篇關(guān)于項(xiàng)目中Axios二次封裝的文章就介紹到這了,更多相關(guān)Axios二次封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
代碼git:git
相關(guān)文章
Vue判斷字符串(或數(shù)組)中是否包含某個(gè)元素的多種方法
在我們前端日常開發(fā)中經(jīng)常會遇到判斷一個(gè)字符串中是否包含某個(gè)元素的需求,下面這篇文章主要給大家介紹了關(guān)于Vue判斷字符串(或數(shù)組)中是否包含某個(gè)元素的多種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
vue element 中的table動態(tài)渲染實(shí)現(xiàn)(動態(tài)表頭)
這篇文章主要介紹了vue element 中的table動態(tài)渲染實(shí)現(xiàn)(動態(tài)表頭),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
vue2+elementui進(jìn)行hover提示的使用
本文主要介紹了vue2+elementui進(jìn)行hover提示的使用,主要分為外部和內(nèi)部,具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11
用vue3封裝一個(gè)符合思維且簡單實(shí)用的彈出層
最近新項(xiàng)目中需要一個(gè)彈窗組件,所以我就做了一個(gè),下面這篇文章主要給大家介紹了關(guān)于如何利用vue3封裝一個(gè)符合思維且簡單實(shí)用的彈出層,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05
vue-cli與webpack處理靜態(tài)資源的方法及webpack打包的坑
這篇文章主要介紹了vue-cli與webpack處理靜態(tài)資源的方法,需要的朋友可以參考下2018-05-05

