1. 程式人生 > >axios攔截設定和錯誤處理

axios攔截設定和錯誤處理

現在vue的官方包已經不更新vue-resource了,轉而推薦axios,下面是專案實戰是總結的axios外掛設定:

/**
 * @file Axios的Vue外掛(新增全域性請求/響應攔截器)
 */

// https://github.com/mzabriskie/axios
import axios from 'axios'

// 攔截request,設定全域性請求為ajax請求
axios.interceptors.request.use((config) => {
  config.headers['X-Requested-With'] = 'XMLHttpRequest'

  return
config })
// 攔截響應response,並做一些錯誤處理 axios.interceptors.response.use((response) => { const data = response.data // 根據返回的code值來做不同的處理(和後端約定) switch (data.code) { case '0': // 舉例 // exp: 修復iPhone 6+ 微信點選返回出現頁面空白的問題 if (isIOS()) { // 非同步以保證資料已渲染到頁面上 setTimeout(() => { //
通過滾動強制瀏覽器進行頁面重繪 document.body.scrollTop += 1 }, 0) } // 這一步保證資料返回,如果沒有return則會走接下來的程式碼,不是未登入就是報錯 return data // 需要重新登入 case 'SHIRO_E5001': // 微信生產環境下授權登入 if (isWeChat() && IS_PRODUCTION) { axios.get(apis.common.wechat.authorizeUrl).then
(({ result }) => { location.replace(global.decodeURIComponent(result)) }) } else { // 否則跳轉到h5登入並帶上跳轉路由 const search = encodeSearchParams({ next: location.href, }) location.replace(`/user/login?${search}`) } // 不顯示提示訊息 data.description = '' break default: } // 若不是正確的返回code,且已經登入,就丟擲錯誤 const err = new Error(data.description) err.data = data err.response = response throw err }, (err) => { // 這裡是返回狀態碼不為200時候的錯誤處理 if (err && err.response) { switch (err.response.status) { case 400: err.message = '請求錯誤' break case 401: err.message = '未授權,請登入' break case 403: err.message = '拒絕訪問' break case 404: err.message = `請求地址出錯: ${err.response.config.url}` break case 408: err.message = '請求超時' break case 500: err.message = '伺服器內部錯誤' break case 501: err.message = '服務未實現' break case 502: err.message = '閘道器錯誤' break case 503: err.message = '服務不可用' break case 504: err.message = '閘道器超時' break case 505: err.message = 'HTTP版本不受支援' break default: } } return Promise.reject(err) })
axios.install = (Vue) =>
{ Vue.prototype.$axios = axios } export default axios