Vue項(xiàng)目中如何使用Axios封裝http請求詳解
前言
使用axios可以統(tǒng)一做請求響應(yīng)攔截,例如請求響應(yīng)時(shí)我們攔截響應(yīng)信息,判斷狀態(tài)碼,從而彈出報(bào)錯(cuò)信息。請求超時(shí)的時(shí)候斷開請求,還可以很方便地使用then或者catch來處理請求。
安裝
npm install axios --save
建立http.js文件
在/src/utils/目錄下建立一個(gè)htttp.js
1.首先導(dǎo)入axios和router。
import axios from 'axios'; import router from '../router';
2.接著設(shè)置axios請求參數(shù)。
axios.defaults.timeout = 5000; //請求超時(shí)5秒 axios.defaults.baseURL =''; //請求base url axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; //設(shè)置post請求是的header信息
如果你要用到session驗(yàn)證碼功能,讓請求攜帶cookie,可以加上以下一行:
axios.defaults.withCredentials = true
3.然后,我們要給請求加個(gè)攔截器,就是在請求即將發(fā)送之前,我們需要給請求添加信息,比如下面的代碼中,我們給請求添加header信息,header中添加token,這樣每次請求都會(huì)在header中攜帶token信息。這在我們的接口開發(fā)中經(jīng)常用到。
//http request 攔截器
axios.interceptors.request.use(
config => {
let token = sessionStorage.getItem('token')
if (token) { // 判斷是否存在token,如果存在的話,則每個(gè)http header都加上token
config.headers = {
'X-token': token
}
}
return config
},
err => {
return Promise.reject(err)
}
)
4.接下來,我們看下請求返回時(shí)的攔截器。
比如我們發(fā)送請求時(shí),如果后端返回錯(cuò)誤代碼,則前端應(yīng)該提示信息。比如后臺(tái)返回沒有權(quán)限,不允許訪問,跳轉(zhuǎn)到登錄頁,這些都可在攔截器上完成。
axios.interceptors.response.use(
response => {
if (response.data.code === 4003) {
Toast({
mes: '您沒有權(quán)限操作!',
timeout: 1500,
callback: () => {
router.go(-1);
}
});
return false;
}
if (response.data.code === -1) {
localStorage.removeItem('token')
router.push({
path:"/login",
querry:{redirect: router.currentRoute.fullPath}//從哪個(gè)頁面跳轉(zhuǎn)
})
}
return response
},
err => {
if (err.code === 'ECONNABORTED' && err.message.indexOf('timeout') !== -1) {
Toast({
mes: '網(wǎng)絡(luò)異常,連接超時(shí)...',
timeout: 1500
});
}
return Promise.reject(err)
}
)
5.現(xiàn)在我們來封裝一個(gè)get方法:
/**
* 封裝get方法
* @param url
* @param data
* @returns {Promise}
*/
export function get(url, params={}, headers={}){
return new Promise((resolve, reject) => {
axios.get(url,{
params: params,
headers: headers
})
.then(response => {
resolve(response.data);
})
.catch(err => {
reject(err)
})
})
}
6.再封裝一個(gè)post方法:
/**
* 封裝post請求
* @param url
* @param data
* @returns {Promise}
*/
export function post(url, data = {}){
return new Promise((resolve, reject) => {
axios.post(url, data)
.then(response => {
resolve(response.data);
}, err => {
reject(err)
})
})
}
使用
在main.js中引入:
import {post,get} from './utils/http'
//定義全局變量
Vue.prototype.$post = post;
Vue.prototype.$get = get;
在組件中使用:
this.$post(url, params)
.then((res) => {
if (res.result === 'success') {
this.$message({
message: '登錄成功!',
type: 'success'
})
this.$router.push('/main')
} else {
this.$message.error(res.msg)
this.refreshCode();
}
});
這段代碼是用戶登錄發(fā)送post請求的代碼示例,其他get請求也是一樣的處理方式。接下來我們會(huì)有文章具體講解如何使用封裝好的axios實(shí)現(xiàn)登錄的例子,敬請關(guān)注。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Vue全局loading及錯(cuò)誤提示的思路與實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于Vue全局loading及錯(cuò)誤提示的思路與實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Elemenu中el-table中使用el-popover選中關(guān)閉無效解決辦法(最新推薦)
這篇文章主要介紹了Elemenu中el-table中使用el-popover選中關(guān)閉無效解決辦法(最新推薦),因?yàn)樵趀l-table-column里,因?yàn)槭嵌嘈?使用trigger="manual"?時(shí),用v-model="visible"來控制時(shí),控件找不到這個(gè)值,才換成trigger="click",需要的朋友可以參考下2024-03-03
解決elementUI中el-tree樹形結(jié)構(gòu)中節(jié)點(diǎn)過濾的問題
這篇文章主要介紹了解決elementUI中el-tree樹形結(jié)構(gòu)中節(jié)點(diǎn)過濾的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
一文學(xué)會(huì)什么是vue.nextTick()
這篇文章主要介紹了一文學(xué)會(huì)什么是vue.nextTick(),下面文章圍繞主題的相關(guān)資料展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04
vue created鉤子函數(shù)與mounted鉤子函數(shù)的用法區(qū)別
這篇文章主要介紹了vue created鉤子函數(shù)與mounted鉤子函數(shù)的用法區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Vue2.0基于vue-cli+webpack同級(jí)組件之間的通信教程(推薦)
下面小編就為大家?guī)硪黄猇ue2.0基于vue-cli+webpack同級(jí)組件之間的通信教程(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
詳解Vue里循環(huán)form表單項(xiàng)實(shí)例
本文主要介紹了Vue里循環(huán)form表單項(xiàng)實(shí)例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Vue 中 a標(biāo)簽上href無法跳轉(zhuǎn)的解決方式
今天小編大家分享一篇Vue 中 a標(biāo)簽上href無法跳轉(zhuǎn)的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11

