axios封裝,使用攔截器統(tǒng)一處理接口,超詳細(xì)的教程(推薦)
最近從0開(kāi)始搭了一個(gè)vue-cli的項(xiàng)目, 雖然axios也可以直接拿來(lái)用,但是對(duì)接口比較零散,不太好進(jìn)行維護(hù),也會(huì)產(chǎn)生大量的重復(fù)代碼,所以筆者對(duì)axios進(jìn)行了統(tǒng)一接口處理,廢話不多說(shuō),直接上代碼。
首先,在vue-cli項(xiàng)目的src路徑下新建一個(gè)axios文件夾,在axios文件夾里新建aps.js和request.js,api.js用于寫(xiě)接口,對(duì)axios的封裝寫(xiě)在request.js里,項(xiàng)目機(jī)構(gòu)如圖:
1. axios統(tǒng)一封裝
然后開(kāi)始統(tǒng)一封裝axios, 首先引入axios、qs依賴,引入main.js主要是用于后面對(duì)接口進(jìn)行統(tǒng)一處理,比如調(diào)接口的時(shí)候,顯示loading等。這個(gè)main.js根據(jù)你個(gè)人情況,可加可不加。
//request.js import axios from "axios"; import qs from "qs"; import app from "../main.js";
然后創(chuàng)建一個(gè)axios實(shí)例,這個(gè)process.env.BASE_URL在config/dev.evn.js、prod.evn.js里面進(jìn)行配置:
/****** 創(chuàng)建axios實(shí)例 ******/ const service = axios.create({ baseURL: process.env.BASE_URL, // api的base_url timeout: 5000 // 請(qǐng)求超時(shí)時(shí)間 });
axios實(shí)例創(chuàng)建好之后,開(kāi)始使用request攔截器對(duì)axios請(qǐng)求配置做統(tǒng)一處理,具體如下:
/****** request攔截器==>對(duì)請(qǐng)求參數(shù)做處理 ******/ service.interceptors.request.use(config => { app.$vux.loading.show({ text: '數(shù)據(jù)加載中……' }); config.method === 'post' ? config.data = qs.stringify({...config.data}) : config.params = {...config.params}; config.headers['Content-Type'] = 'application/x-www-form-urlencoded'; return config; }, error => { //請(qǐng)求錯(cuò)誤處理 app.$vux.toast.show({ type: 'warn', text: error }); Promise.reject(error) });
然后是對(duì)response做統(tǒng)一處理,代碼如下:
/****** respone攔截器==>對(duì)響應(yīng)做處理 ******/ service.interceptors.response.use( response => { //成功請(qǐng)求到數(shù)據(jù) app.$vux.loading.hide(); //這里根據(jù)后端提供的數(shù)據(jù)進(jìn)行對(duì)應(yīng)的處理 if (response.data.result === 'TRUE') { return response.data; } else { app.$vux.toast.show({ //常規(guī)錯(cuò)誤處理 type: 'warn', text: response.data.data.msg }); } }, error => { //響應(yīng)錯(cuò)誤處理 console.log('error'); console.log(error); console.log(JSON.stringify(error)); let text = JSON.parse(JSON.stringify(error)).response.status === 404 ? '404' : '網(wǎng)絡(luò)異常,請(qǐng)重試'; app.$vux.toast.show({ type: 'warn', text: text }); return Promise.reject(error) } );
最后,將我們的axios實(shí)例暴露出去,整個(gè)axios的封裝就寫(xiě)完了。
export default service;
2. axios接口的調(diào)用方式
axios封裝好之后,調(diào)用就很簡(jiǎn)單了。我們把接口統(tǒng)一寫(xiě)在api.js文件里。(當(dāng)然,如果你的業(yè)務(wù)非常復(fù)雜的話,建議把不同業(yè)務(wù)的api分開(kāi)放到不同的文件里,這樣方便以后維護(hù))。
注意:post請(qǐng)求參數(shù)放在data里面,get請(qǐng)求參數(shù)放在params里。
//api.js import service from './request' export const getPersonInfo = data => { return service({ url: '/person_pay/getpersoninfo', method: 'post', data }) };
然后在具體的組件中進(jìn)行調(diào)用。
//index.vue import {getPersonInfo} from '../axios/api.js' export default { created: async function () { const params = { card_no: '111' }; let res = await getPersonInfo(params); console.log(res); } }
附上項(xiàng)目代碼地址: https://github.com/xie991283109/vueCli-test
以上所述是小編給大家介紹的axios封裝使用攔截器處理接口詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
vue+elementui實(shí)現(xiàn)動(dòng)態(tài)控制表格列的顯示和隱藏
這篇文章主要介紹了vue+elementui實(shí)現(xiàn)動(dòng)態(tài)控制表格列的顯示和隱藏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Vue3進(jìn)階主題Composition API使用詳解
這篇文章主要為大家介紹了Vue3進(jìn)階主題Composition API使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04詳解Vue中過(guò)度動(dòng)畫(huà)效果應(yīng)用
這篇文章主要介紹了詳解Vue中過(guò)度動(dòng)畫(huà)效果應(yīng)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05從零開(kāi)始在vue-cli4配置自適應(yīng)vw布局的實(shí)現(xiàn)
這篇文章主要介紹了從零開(kāi)始在vue-cli4配置自適應(yīng)vw布局,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06vue3中?provide?和?inject?用法小結(jié)
父子組件傳遞數(shù)據(jù)時(shí),使用的是props和emit,父?jìng)髯訒r(shí),使用的是?props,如果是父組件傳孫組件時(shí),就需要先傳給子組件,子組件再傳給孫組件,如果多個(gè)子組件或多個(gè)孫組件使用時(shí),就需要傳很多次,會(huì)很麻煩,這篇文章主要介紹了vue3中?provide?和?inject?用法,需要的朋友可以參考下2023-11-11Vue2.0仿餓了么webapp單頁(yè)面應(yīng)用詳細(xì)步驟
本篇文章給大家分享了Vue2.0仿餓了么webapp單頁(yè)面應(yīng)用詳細(xì)步驟,有興趣的朋友可以跟著操作下。2018-07-07vue跳轉(zhuǎn)頁(yè)面并且實(shí)現(xiàn)參數(shù)傳遞接受示例
這篇文章主要為大家介紹了vue跳轉(zhuǎn)頁(yè)面并且實(shí)現(xiàn)參數(shù)傳遞接受示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06