Vue專案之Axios資料請求
阿新 • • 發佈:2019-02-18
擼了兩個月的專案程式碼,終於可以喘口氣,寫一下自己在Vue專案中所學習到的經驗了。
所有專案都避不開向後臺請求資料,而為了響應我們 尤大大 的倡導,我們專案決定使用 Axios 處理資料請求的問題。下面就是我學到的,貢獻大家,希望對你們有所幫助。
Axios使用手冊 (我就是看著這個邊學習邊寫專案的)
Vue專案中,將Axios封裝為一個函式,方便我們以後重複呼叫
//引入 Axios
import Axios from 'axios'
//引入 Axios 請求資料所需要的配置檔案,這個稍後有答案,很簡單
import Config from './Config.js'
//專案中引用了 ElementUI,用載入和提示兩個元件,在請求資料時,後返回狀態碼後的行為
import { Loading } from 'element-ui'
import { Notification } from 'element-ui'
let loading;
// 新增請求攔截器,在請求時,顯示 ElementUI 的載入元件
Axios.interceptors.request.use(function (config) {
loading = Loading.service({ fullscreen: true ,text:'瘋狂載入中'});
return config;
}, function (error) {
// 對請求錯誤做些什麼
return Promise.reject(error);
});
// 新增響應攔截器 ,請求結束後,關閉 載入元件
Axios.interceptors.response.use(function (response) {
loading.close();
return response;
}, function (error) {
// 對響應錯誤做點什麼
return Promise.reject(error);
});
// 封裝請求資料的物件方法
class Ajax {
static Get(url){
// 通過Promise完成非同步操作,將資料進行初步處理輸出為Json物件
var P = new Promise(function(resolve, reject){
Axios.get(url,Config)
.then((res)=>{
//判斷後臺返回狀態碼,作出相應行為
switch(res.data.status){
case 0:
Notification({
title : '錯誤提示',
message : res.data.message,
type : 'error'
});
break;
default:
resolve(res.data.data);
break;
}
}).catch((error)=>{
console.log(error)
reject(error);
});
});
return P
}
static Post(url){
var P = new Promise(function(resolve, reject){
Axios.get(url,data,Config)
.then((res)=>{
console.log(res.data.data)
switch(res.data.status){
case 0:
Notification({
title : '錯誤提示',
message : res.data.message,
type : 'error'
});
break;
default:
resolve(res.data.data);
break;
}
}).catch((error)=>{
console.log(error)
reject(error);
});
});
return P
}
}
// 將封裝好的 Ajax函式方法輸出,方便呼叫
export default Ajax;
說好的配置檔案,在這裡,繼續向下看吧。
//Qs 是個資料處理外掛,標配
import Qs from 'qs'
export default{
//請求的介面,在請求的時候,如axios.get(url,config);這裡的url會覆蓋掉config中的url
url: '/route',
// 請求方法同上
method: 'get', // default
// 基礎url字首,請求資料時,會把baseURL和url拼接為完整的請求路徑
baseURL: 'Router/',
transformRequest: [function (data) {
// 這裡可以在傳送請求之前對請求資料做處理,比如form-data格式化等,這裡可以使用開頭引入的Qs(這個模組在安裝axios的時候就已經安裝了,不需要另外安裝)
data = Qs.stringify({});
return data;
}],
transformResponse: [function (data) {
// 這裡提前處理返回的資料
return data;
}],
// 請求頭資訊
headers: {'X-Requested-With': 'XMLHttpRequest'},
// `paramsSerializer` 是一個負責 `params` 序列化的函式
// (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
paramsSerializer: function(params) {
return Qs.stringify(params, {arrayFormat: 'brackets'})
},
//post引數,使用axios.post(url,{},config);如果沒有額外的也必須要用一個空物件,否則會報錯
//設定超時時間,隨意
timeout: 1000,
//返回資料型別
responseType: 'json', // default
// `validateStatus` 定義對於給定的HTTP 響應狀態碼是 resolve 或 reject promise 。如果 `validateStatus` 返回 `true` (或者設定為 `null` 或 `undefined`),promise 將被 resolve; 否則,promise 將被 rejecte
validateStatus: function (status) {
return status >= 200 && status < 300; // 預設的
},
// `maxRedirects` 定義在 node.js 中 follow 的最大重定向數目
// 如果設定為0,將不會 follow 任何重定向
maxRedirects: 5, // 預設的
}
Axios使用手冊 ,這個使用手冊裡面還有很多引數,看專案情況使用,我這裡就不多說了。