1. 程式人生 > >vue實力封裝axios

vue實力封裝axios

----------分割線start---------------

更新時間:2018-6-29

更新內容:新增超時重新請求

更新地址:https://github.com/94club/94club.github.io/blob/master/src/main.js

---------分割線end--------------

找了很多axios的封裝,終於組拼出了自己的axios

喜歡的同學。麻煩給個star,謝謝    https://github.com/zaofeng/just_for_base 

import axios from 'axios'
import qs from 'qs'
let axiosIns = axios.create
({}); if (process.env.NODE_ENV == 'development') { axiosIns.defaults.baseURL = '***'; } else if (process.env.NODE_ENV == 'debug') { axiosIns.defaults.baseURL = '***'; } else if (process.env.NODE_ENV == 'production') { axiosIns.defaults.baseURL = '***'; } axiosIns.defaults.headers.post['X-Requested-With'
] = 'XMLHttpRequest'; axiosIns.defaults.headers.get['X-Requested-With'] = 'XMLHttpRequest'; axiosIns.defaults.responseType = 'json'; axiosIns.defaults.transformRequest = [function (data) { //資料序列化 return qs.stringify(data); } ]; axiosIns.defaults.validateStatus = function (status) { return true
; }; axiosIns.interceptors.request.use(function (config) { //配置config config.headers.Accept = 'application/json'; // config.headers.System = 'vue'; // let token = Vue.localStorage.get('token'); // if(token){ // config.headers.Token = token; // } return config; }); axiosIns.interceptors.response.use(function (response) { let data = response.data; let status = response.status; if (status === 200) { return Promise.resolve(response); } else { return Promise.reject(response); } }); let ajaxMethod = ['get', 'post']; let api = {}; ajaxMethod.forEach((method)=> { //陣列取值的兩種方式 api[method] = function (uri, data, config) { return new Promise(function (resolve, reject) { axiosIns[method](uri, data, config).then((response)=> { /*根據後臺資料進行處理 *1 code===200 正常資料+錯誤資料 code!==200 網路異常等 *2 code===200 正常資料 code!==200 錯誤資料+網路異常等 * 這裡使用的是第一種方式 * ...... */ if (response.data.StatusCode) { //toast封裝: 參考ele-mint-ui Toast({ message: response.data.Message, position: 'top', duration: 2000 }); if (response.data.Message === '未登入') { Toast({ message: response.data.Message, position: '', duration: 2000 }); //使用vue例項做出對應行為 change state or router //instance.$store.commit('isLoginShow',true); } } else { resolve(response); } }).catch((response)=> { //reject response //alert('xiuxiu,限你10分鐘到我面前來,不然...'); }) }) } }); Vue.prototype.$axios = api; //..... let instance =new Vue({ store, router, el: '#app', render: h => h(App) }); /* 1 根據process.env.NODE_ENV 獲取對應的apiDomain * 2 處理ajaxaxios,為了以後不重複引用,掛在原型物件上 * 3 axios是封裝在main.js裡面的,是為了獲取vue例項操作storerouter * 4 元件裡面使用this.$axios.get or this.$axios.post 呼叫 使用debugger,檢視介面返回資料的走向 */