国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue+axios 前端實現的常用攔截的代碼示例

2019-11-19 13:10:40
字體:
來源:轉載
供稿:網友

Axios攔截器配置

main.js

//定義一個請求攔截器Axios.interceptors.request.use(function(config){ store.state.isShow=true; //在請求發出之前進行一些操作 return config})//定義一個響應攔截器Axios.interceptors.response.use(function(config){ store.state.isShow=false;//在這里對返回的數據進行處理 return config})

分別定義一個請求攔截器(請求開始時執行某些操作)、響應攔截器(接受到數據后執行某些操作),之間分別設置攔截時執行的操作,改變state內isShow的布爾值從而控制loading組件在觸發請求數據開始時顯示loading,返回數據時隱藏loading
特別注意:這里有一個語法坑(我可是來來回回踩了不少次)main.js中調取、操作vuex state中的數據不同于組件中的this.$store.state,而是直接store.state 同上面代碼

一、路由攔截使用

router.beforeEach((to, from, next) => { if (to.meta.requireAuth) { // 判斷該路由是否需要登錄權限  if (store.state.token) { // 通過vuex state獲取當前的token是否存在   next();  }  else {   next({    path: '/login',    query: {redirect: to.fullPath} // 將跳轉的路由path作為參數,登錄成功后跳轉到該路由   })  } } else {  next(); }})

二、攔截器使用

要想統一處理所有http請求和響應,就得用上 axios 的攔截器。通過配置http response inteceptor,當后端接口返回401 Unauthorized(未授權),讓用戶重新登錄。

// http request 攔截器axios.interceptors.request.use( config => {  if (store.state.token) { // 判斷是否存在token,如果存在的話,則每個http header都加上token   config.headers.Authorization = `token ${store.state.token}`;  }  return config; }, err => {  return Promise.reject(err); }); // http response 攔截器axios.interceptors.response.use( response => {  return response; }, error => {  if (error.response) {   switch (error.response.status) {    case 401:     // 返回 401 清除token信息并跳轉到登錄頁面     store.commit(types.LOGOUT);     router.replace({      path: 'login',      query: {redirect: router.currentRoute.fullPath}     })   }  }  return Promise.reject(error.response.data) // 返回接口返回的錯誤信息 });

三、實例

/** * http配置 */// 引入axios以及element ui中的loading和message組件import axios from 'axios'import { Loading, Message } from 'element-ui'// 超時時間axios.defaults.timeout = 5000// http請求攔截器var loadinginstaceaxios.interceptors.request.use(config => { // element ui Loading方法 loadinginstace = Loading.service({ fullscreen: true }) return config}, error => { loadinginstace.close() Message.error({ message: '加載超時' }) return Promise.reject(error)})// http響應攔截器axios.interceptors.response.use(data => {// 響應成功關閉loading loadinginstace.close() return data}, error => { loadinginstace.close() Message.error({ message: '加載失敗' }) return Promise.reject(error)}) export default axios

 如果你是使用了vux,那么在main.js這樣使用:

Vue.prototype.$http.interceptors.response.use()

參考地址:vue中axios解決跨域問題和攔截器使用

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 合肥市| 贡嘎县| 西盟| 武宣县| 平遥县| 泰顺县| 嵊州市| 广水市| 仪征市| 广南县| 景东| 万全县| 桐庐县| 浦城县| 阳朔县| 大理市| 青川县| 蕲春县| 舞钢市| 仪征市| 营山县| 西盟| 武乡县| 保康县| 镇宁| 万年县| 公主岭市| 改则县| 余干县| 全椒县| 临洮县| 繁昌县| 和静县| 邢台市| 永胜县| 大余县| 荃湾区| 台南市| 墨江| 定襄县| 昭平县|