總結(jié):vue中Axios的封裝-API接口的管理

vue中axios的封裝

在vue項(xiàng)目和后端交互獲取數(shù)據(jù)時(shí),通常使用axios庫毅否,官方文檔岩馍。

淺談在項(xiàng)目中axios的簡單二次封裝

安裝

npm install axios; //安裝axios

//cnpm install axios;//或者使用鏡像下載.

#### 引入組件

**通常情況下,在項(xiàng)目src目錄下創(chuàng)建request文件夾扮叨,然后創(chuàng)建http.js和api.js文件。**

- http.js用來二次封裝axios坦冠;

-? api.js用來統(tǒng)一管理后端接口形耗;

**在http.js文件中**

- 引入axios;

- 引入qs辙浑,用于序列化post類型的數(shù)據(jù)激涤。

- 引入ui提示框,根據(jù)自己u進(jìn)行修改判呕;**[推薦elementui文檔]**



?環(huán)境切換

在http.js的文件中的axios.defaults.baseURL可以設(shè)置axios的默認(rèn)請求地址倦踢。配合不同的運(yùn)行指令進(jìn)行開發(fā)不同環(huán)境的數(shù)據(jù)。

另附配置[vue不同環(huán)境配置不同打包命令]

// 環(huán)境的切換

if (process.env.NODE_ENV == 'development') {? ?

? ? axios.defaults.baseURL = 'https://www.baidu.com';}

else if (process.env.NODE_ENV == 'debug') {? ?

? axios.defaults.baseURL = 'https://www.ceshi.com';

}

else if (process.env.NODE_ENV == 'production') {? ?

? ? ? axios.defaults.baseURL = 'https://www.production.com';

}

請求默認(rèn)值的設(shè)置

**通過axios.defaults.timeout設(shè)置默認(rèn)的請求超時(shí)時(shí)間侠草。**

//設(shè)置默認(rèn)的請求超時(shí)時(shí)間

axios.defaults.timeout = 10000;

**設(shè)置默認(rèn)請求頭和token**

//設(shè)置post的請求頭

axios.defaults.headers.post['Content-Type'] = 'application/json';

//設(shè)置默認(rèn)token 一般有權(quán)限不在這里設(shè)置

//axios.defaults.headers.Authorization=token;

請求攔截

**token攔截**

一般情況下辱挥,發(fā)送請求必須帶有token進(jìn)行驗(yàn)證。做權(quán)限的話這里需要注意边涕。

axios.interceptors.request.use(

config => {

? ? let token = localStorage.getItem("header");

? ? if (token) {? // 判斷是否存在token晤碘,如果存在的話,則每個(gè)http header都加上token

? ? ? config.headers.token = `${token}`;

? ? }

? ? return config;

? },

? err => {

? ? this.$router.push("/login")

? ? return Promise.reject(err);

? });


**響應(yīng)攔截**

*這里需要根據(jù)后端協(xié)商功蜓,根據(jù)后端返回狀態(tài)碼進(jìn)行處理*


axios.interceptors.response.use(function (response) {

? if (response.status >= 400) {

? ? localStorage.clear();// 刪除已經(jīng)失效或過期的token(不刪除也可以园爷,因?yàn)榈卿浐蟾采w)

? ? router.replace({

? ? ? path: '/login', // 到登錄頁重新獲取token

? ? ? query: {

? ? ? //回到當(dāng)前頁面

? ? ? ? redirect: router.currentRoute.fullPath

? ? }

? ? })

? }

? return response

}, function (error) {

? if (error.response) {

? ? if(error.response.status===403){

? ? Message({

? ? ? ? showClose: true,

? ? ? ? message: '登錄過期',

? ? ? ? type: 'error'

? ? });

? ? ? ? localStorage.clear();

? ? ? ? Cookies.set("user","",-10);

? ? ? ? router.replace({

? ? ? ? ? path: '/login' // 到登錄頁重新獲取token

? ? ? ? })

? ? }else if(error.response.status===405){

? ? ? Message({

? ? ? ? showClose: true,

? ? ? ? message: '權(quán)限不足,請聯(lián)系管理員',

? ? ? ? type: 'warning'

? ? });

? ? router.replace({

? ? path: '/error',

? ? })

? ? }else if(error.response.status===500){

? ? ? Message({

? ? ? ? showClose: true,

? ? ? ? message: '服務(wù)器異常',

? ? ? ? type: 'error'

? });

? ? }

? ? }

? return Promise.reject(error)

})

封裝get和post方法

*axios封裝的方法有很多,比如get,post,delete,put等方法式撼。這里簡單介紹get和post的封裝童社。*

**post**

/**

* post方法,對應(yīng)post請求

* @param {String} url [請求的url地址]

* @param {Object} params [請求時(shí)攜帶的參數(shù)]

*/

export function post(url, params) {

? ? return new Promise((resolve, reject) => {

? ? ? ? axios.post(url, params)

? ? ? ? ? ? .then(res => {

? ? ? ? ? ? ? ? resolve(res.data);

? ? ? ? ? ? })

? ? ? ? ? ? .catch(err => {

? ? ? ? ? ? ? ? reject(err.data)

? ? ? ? ? ? })

? ? });

}

**get**

/**

* get方法端衰,對應(yīng)get請求

* @param {String} url [請求的url地址]

* @param {Object} params [請求時(shí)攜帶的參數(shù)]

*/

export function get(url, params) {

? ? return new Promise((resolve, reject) => {

? ? ? ? axios.get(url, {

? ? ? ? ? ? params: params

? ? ? ? }).then(res => {

? ? ? ? ? ? resolve(res.data);

? ? ? ? }).catch(err => {

? ? ? ? ? ? reject(err.data)

? ? ? ? })

? ? });

}

vue中api的封裝

*首先在api.js中引入在http.js中封裝的get和post兩種方法。*

import { get, post } from './http'

*不同參數(shù)的封裝接口方法*

export const Login = p => get('/api/admin/login', p);

export const Registry = p => post('/api/admin/registry', p);

//路徑參數(shù)封裝

//export const? Api= p => post('/api/'+ p);

//多參數(shù)封裝

export const? Api=( p甘改,q )=> post('/api/'+ p+“/"+q);

*頁面中使用方法*

import { Login,Registry } from "@/request/api"

export default {

name:"app",

data(){

return{

message:{

uname:"",

upwd:""

}

}

},

methods:{

login(){

Login(this.message).then(res=>{

....請求成功的處理

})

}

}

}

例外附上:

1.[gulp安裝與使用]

2.[搭建基于webpack的vue環(huán)境]

3.[淺談Vue項(xiàng)目優(yōu)化心得]

4.[總結(jié):搭建Vue項(xiàng)目心得]

5. [總結(jié):vue中Axios的封裝-API接口的管理]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旅东,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子十艾,更是在濱河造成了極大的恐慌抵代,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忘嫉,死亡現(xiàn)場離奇詭異荤牍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)庆冕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門康吵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人访递,你說我怎么就攤上這事晦嵌。” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵惭载,是天一觀的道長旱函。 經(jīng)常有香客問我,道長描滔,這世上最難降的妖魔是什么棒妨? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮含长,結(jié)果婚禮上券腔,老公的妹妹穿的比我還像新娘。我一直安慰自己茎芋,他們只是感情好颅眶,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著田弥,像睡著了一般涛酗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上偷厦,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天商叹,我揣著相機(jī)與錄音,去河邊找鬼只泼。 笑死剖笙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的请唱。 我是一名探鬼主播弥咪,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼十绑!你這毒婦竟也來了聚至?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤本橙,失蹤者是張志新(化名)和其女友劉穎扳躬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甚亭,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贷币,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亏狰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片役纹。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖暇唾,靈堂內(nèi)的尸體忽然破棺而出字管,到底是詐尸還是另有隱情啰挪,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布嘲叔,位于F島的核電站亡呵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏硫戈。R本人自食惡果不足惜锰什,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丁逝。 院中可真熱鬧汁胆,春花似錦、人聲如沸霜幼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罪既。三九已至铸题,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琢感,已是汗流浹背丢间。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驹针,地道東北人烘挫。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像柬甥,于是被迫代替她去往敵國和親饮六。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344