axios封裝,使用攔截器統(tǒng)一處理接口,超詳細(xì)的教程(推薦)
最近從0開始搭了一個vue-cli的項(xiàng)目, 雖然axios也可以直接拿來用,但是對接口比較零散,不太好進(jìn)行維護(hù),也會產(chǎn)生大量的重復(fù)代碼,所以筆者對axios進(jìn)行了統(tǒng)一接口處理,廢話不多說,直接上代碼。
首先,在vue-cli項(xiàng)目的src路徑下新建一個axios文件夾,在axios文件夾里新建aps.js和request.js,api.js用于寫接口,對axios的封裝寫在request.js里,項(xiàng)目機(jī)構(gòu)如圖:

1. axios統(tǒng)一封裝
然后開始統(tǒng)一封裝axios, 首先引入axios、qs依賴,引入main.js主要是用于后面對接口進(jìn)行統(tǒng)一處理,比如調(diào)接口的時候,顯示loading等。這個main.js根據(jù)你個人情況,可加可不加。
//request.js import axios from "axios"; import qs from "qs"; import app from "../main.js";
然后創(chuàng)建一個axios實(shí)例,這個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 // 請求超時時間
});
axios實(shí)例創(chuàng)建好之后,開始使用request攔截器對axios請求配置做統(tǒng)一處理,具體如下:
/****** request攔截器==>對請求參數(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 => { //請求錯誤處理
app.$vux.toast.show({
type: 'warn',
text: error
});
Promise.reject(error)
});
然后是對response做統(tǒng)一處理,代碼如下:
/****** respone攔截器==>對響應(yīng)做處理 ******/
service.interceptors.response.use(
response => { //成功請求到數(shù)據(jù)
app.$vux.loading.hide();
//這里根據(jù)后端提供的數(shù)據(jù)進(jìn)行對應(yīng)的處理
if (response.data.result === 'TRUE') {
return response.data;
} else {
app.$vux.toast.show({ //常規(guī)錯誤處理
type: 'warn',
text: response.data.data.msg
});
}
},
error => { //響應(yīng)錯誤處理
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ò)異常,請重試';
app.$vux.toast.show({
type: 'warn',
text: text
});
return Promise.reject(error)
}
);
最后,將我們的axios實(shí)例暴露出去,整個axios的封裝就寫完了。
export default service;
2. axios接口的調(diào)用方式
axios封裝好之后,調(diào)用就很簡單了。我們把接口統(tǒng)一寫在api.js文件里。(當(dāng)然,如果你的業(yè)務(wù)非常復(fù)雜的話,建議把不同業(yè)務(wù)的api分開放到不同的文件里,這樣方便以后維護(hù))。
注意:post請求參數(shù)放在data里面,get請求參數(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封裝使用攔截器處理接口詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
element vue Array數(shù)組和Map對象的添加與刪除操作
這篇文章主要介紹了element vue Array數(shù)組和Map對象的添加與刪除功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-11-11
使用vue-cli創(chuàng)建項(xiàng)目并webpack打包的操作方法
本文給大家分享使用vue-cli創(chuàng)建項(xiàng)目基于webpack模板打包的配置方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-07-07
vue element自定義表單驗(yàn)證請求后端接口驗(yàn)證
這篇文章主要介紹了vue element自定義表單驗(yàn)證請求后端接口驗(yàn)證,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
vue 實(shí)現(xiàn)移動端鍵盤搜索事件監(jiān)聽
今天小編就為大家分享一篇vue 實(shí)現(xiàn)移動端鍵盤搜索事件監(jiān)聽,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
vue使用自定義事件的表單輸入組件用法詳解【日期組件與貨幣組件】
這篇文章主要介紹了vue使用自定義事件的表單輸入組件用法,結(jié)合實(shí)例形式詳細(xì)分析了vue.js日期組件與貨幣組件相關(guān)操作技巧及注意事項(xiàng),需要的朋友可以參考下2020-06-06

