項(xiàng)目中Axios二次封裝實(shí)例Demo
1.為什么做封裝?
方便代碼整體調(diào)用、對(duì)請(qǐng)求做公共處理、個(gè)性化定制
2.別人已經(jīng)封裝了很多,為什么不直接修改使用?
- 封裝思路不適合自身項(xiàng)目
- 封裝后調(diào)用不方便
3.個(gè)人封裝demo
代碼結(jié)構(gòu)【基于vue】
基本思路
將所有的請(qǐng)求接口地址按照文件分模塊存儲(chǔ),比如 request/module/user 用戶(hù)信息相關(guān)模塊【服務(wù)】
2.封裝方法、類(lèi)。給所有請(qǐng)求綁定常用的請(qǐng)求方法,和對(duì)請(qǐng)求url上的路徑參數(shù)做處理
generateServer.js
import server from "../util/axiosConfig"; // 修改axios基本配置,請(qǐng)求配置 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: // 請(qǐng)求方法 '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ā)送請(qǐng)求 userInfoServer.getUserName .getdata({ queryParm: { id: 223, }, }) .then((res) => { console.log("res", res); }); // 發(fā)送請(qǐng)求 userInfoServer.getUserName .postdata({ body: { id: 223, }, }) .then((res) => { console.log("res", res); }); // 發(fā)送get請(qǐng)求,請(qǐng)求路徑帶參數(shù) userInfoServer.getUserList .getdata({ queryParm: { id: 223, }, pathParm: { id: 567, }, }) .then((res) => { console.log("res", res); });
總結(jié):
上述的封裝,主要是對(duì)請(qǐng)求拆分比較細(xì)致,便于維護(hù)。開(kāi)發(fā)時(shí)也比較方便。對(duì)于新接口需求,只需要在對(duì)應(yīng)模塊增加URl配置和響應(yīng)的生成器配置。便可以在業(yè)務(wù)代碼里面處理請(qǐng)求。對(duì)于路徑參數(shù)和請(qǐng)求體參數(shù)做了封裝,使用時(shí)不需要關(guān)心相應(yīng)的配置。
上述代碼沒(méi)有處理文件上傳、get請(qǐng)求參數(shù)字符串等情況。但是在對(duì)應(yīng)的axios里面增加配置即可。維護(hù)方便。
到此這篇關(guān)于項(xiàng)目中Axios二次封裝的文章就介紹到這了,更多相關(guān)Axios二次封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
代碼git:git
相關(guān)文章
一次用vue3簡(jiǎn)單封裝table組件的實(shí)戰(zhàn)過(guò)程
之所以封裝全局組件是為了省事,所有的目的,全都是為了偷懶,下面這篇文章主要給大家介紹了關(guān)于用vue3簡(jiǎn)單封裝table組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12Vue elementui字體圖標(biāo)顯示問(wèn)題解決方案
這篇文章主要介紹了Vue elementui字體圖標(biāo)顯示問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08elementUI el-form 數(shù)據(jù)無(wú)法賦值且不報(bào)錯(cuò)解決方法
本文主要介紹了elementUI el-form 數(shù)據(jù)無(wú)法賦值且不報(bào)錯(cuò)解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12微信內(nèi)置開(kāi)發(fā) iOS修改鍵盤(pán)換行為搜索的解決方案
今天小編就為大家分享一篇微信內(nèi)置開(kāi)發(fā) iOS修改鍵盤(pán)換行為搜索的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11vue+iview實(shí)現(xiàn)分頁(yè)及查詢(xún)功能
這篇文章主要為大家詳細(xì)介紹了vue+iview實(shí)現(xiàn)分頁(yè)及查詢(xún)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11