axios是一個基于Promise的HTTP庫,可以用于瀏覽器和Node.js。封裝了XMLHttpRequest請求、返回Promise,提供了常見的請求和響應處理方式,因而得到了廣泛的應用。與Vue相結(jié)合使用,可以方便地進行數(shù)據(jù)交互,實現(xiàn)網(wǎng)站的前后端分離。
在Vue項目中,可以使用axios獲取數(shù)據(jù)。可以安裝axios并在Vue實例中引用。
npm install axios
Vue.prototype.$http = axios
然后可以在Vue組件中使用axios,如下所示:
axios.get('/api/getData')
.then(res => {
console.log(res.data)
})
.catch(error => {
console.log(error)
})
其中,axios.get是一個Promise對象,返回的結(jié)果是res,其中包含了我們從服務器獲取到的數(shù)據(jù)。
如果服務器返回的數(shù)據(jù)格式為JSON格式,可以使用Vue的響應攔截器對響應數(shù)據(jù)進行處理。
axios.interceptors.response.use(
response => {
const data = response.data
if (data.code === 200) {
return data
} else {
// 對錯誤進行處理
}
},
error => {
console.log(error)
// 對錯誤進行處理
return Promise.reject(error)
}
)
在響應攔截器中,可以對響應數(shù)據(jù)進行處理,例如,當服務器返回的數(shù)據(jù)code為200時,可以返回數(shù)據(jù)本身;當code不為200時,可以對錯誤進行處理。
一般情況下,服務器返回的數(shù)據(jù)會包含code、msg和data三個字段。在響應攔截器中,可以對這三個字段進行處理。
// 對code進行處理
const code = data.code
if (code === 200) {
return data.data
} else {
// 對錯誤進行處理
}
// 對msg進行處理
const msg = data.msg
if (msg) {
// 彈出錯誤提示
}
// 對data進行處理
const data = data.data
if (!data) {
// 數(shù)據(jù)為空時的處理
}
最后,需要注意的是,我們可以在Vue組件中使用axios來獲取服務器數(shù)據(jù),但是在響應攔截器中,可能需要使用Vue的vm實例中的對象,例如,通過vm.$router跳轉(zhuǎn)頁面,這時可以將Vue實例存儲在window對象中,方便在響應攔截器中使用。
window.vueInstance = new Vue({
router,
store,
render: h => h(App),
}).$mount('#app')
axios.interceptors.response.use(
response => {
const data = response.data
if (data.code === 200) {
return data
} else {
// 對錯誤進行處理
window.vueInstance.$router.push('/error')
}
},
error => {
console.log(error)
// 對錯誤進行處理
return Promise.reject(error)
}
)