500攔截報錯 axios_有關處理axios攔截設置和錯誤處理的方法


500攔截報錯 axios_有關處理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) => {undefined

config.headers['X-Requested-With'] = 'XMLHttpRequest'

return config

})

// 攔截響應response,並做一些錯誤處理

axios.interceptors.response.use((response) => {undefined

const data = response.data

// 根據返回的code值來做不同的處理(和后端約定)

switch (data.code) {undefined

case '0':

// 舉例

// exp: 修復iPhone 6+ 微信點擊返回出現頁面空白的問題

if (isIOS()) {undefined

// 異步以保證數據已渲染到頁面上

setTimeout(() => {undefined

// 通過滾動強制瀏覽器進行頁面重繪

document.body.scrollTop += 1

}, 0)

}

// 這一步保證數據返回,如果沒有return則會走接下來的代碼,不是未登錄就是報錯

return data

// 需要重新登錄

case 'SHIRO_E5001':

// 微信生產環境下授權登錄

if (isWeChat() && IS_PRODUCTION) {undefined

axios.get(apis.common.wechat.authorizeUrl).then(({ result }) => {undefined

location.replace(global.decodeURIComponent(result))

})

} else {undefined

// 否則跳轉到h5登錄並帶上跳轉路由

const search = encodeSearchParams({undefined

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) {undefined

switch (err.response.status) {undefined

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) => {undefined

Vue.prototype.$axios = axios

}

export default axios
————————————————
版權聲明:本文為CSDN博主「處黑」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_36087357/article/details/113889556


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM