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