当我们使用vuecli做项目时,用到axios来调用后台数据,这个时候我们要对axios进行封装,方便维护
 
 
1.src下新建request文件夹
 

 
2.config.js中
 
 
let url
if (process.env.NODE_ENV == "development") { 
    
    url = "http://192.168.1.6:8002" 
} else {
    
    url = "http://127.0.0.1:8002"
}
export default {
    url
}
 
3.http.js
 
 
import config from './config'
import Axios from 'axios';
import router from '../router'
import { MessageBox } from 'element-ui'
import { Message } from 'element-ui' 
const axios = Axios.create({
    baseURL: config.url,
    timeout: 150000, 
});
axios.interceptors.request.use(
    function(config) {
        let configurl = config.url
        
        let userinfo = JSON.parse(localStorage.getItem('userInfo')) || ''
        
        if (userinfo) {
            let tokens = userinfo.cli_user.token
            let xcxtoken = userinfo.wx_user.token
                
            if (tokens && typeof tokens === 'string') { 
                if (configurl.indexOf("/api_wx") != -1) {
                    config.headers.Authorization = 'Bearer ' + xcxtoken; 
                } else {
                    config.headers.Authorization = 'Bearer ' + tokens; 
                }  
            }
        } 
        
        
        
        
        
            
        
        return config;
    },
    function(error) {
        
        Message.error('请求中错误:' + error);
        
        return Promise.reject(error);
    }
);
axios.interceptors.response.use(
    function(response) { 
        
        if (response.status == 200) {
            if (response.data.code != 0) {
                MessageBox.alert(response.data.msg, '错误', {
                    confirmButtonText: "确定",
                    type: "error",
                }).then(() => {
                    if (response.data.code == 401) {
                         localStorage.removeItem("userInfo");
                        router.replace("/login");
                    }
                })
                if (response.data.msg == "user auth error") {
                    localStorage.removeItem("userInfo");
                    localStorage.removeItem("permissions");
                    router.replace("/login");
                }
                if (response.data.msg == "login timeout or not login") {
                    localStorage.removeItem("userInfo");
                    localStorage.removeItem("permissions");
                    router.replace("/login");
                }
                if (response.data.msg == "登录超时,请重新登录.") {
                    localStorage.removeItem("userInfo");
                    localStorage.removeItem("permissions");
                    router.replace("/login");
                }
            }
        } else {
            
            MessageBox.alert('系统错误', '错误', {
                confirmButtonText: "确定",
                type: "error",
            })
        }
        return response;
    },
    function(error) {
        
        MessageBox.alert(error, '错误', {
                confirmButtonText: "确定",
                type: "error",
            })
            
        return Promise.reject(error);
    }
); 
export default axios 
 
4.api.js
 
 
import login from './login'
import home from './home'
 
export default {
    ...login,
    ...home,
}
 
5.模块下使用接口
 
 
import http from '../http.js';
let getvip = (params) => {
    return http({
        url: '/grade/grade',
        params
    }) 
}
let addvip = (data) => {
    return http({
        method: 'POST',
        url: '/grade/grade',
        data
    })
}
export default {
	getvip,
	addvip
}
 
6.main.js中挂载全局api
 
 
import api from './request/api'
Vue.prototype.$api = api
 
7.在组建中使用
 
  
    getlist() {
      this.loading = true; 
      this.$api.getvip( this.formInline ).then((res) => {
        this.loading = false;
        if (res.data.code == 1) {
          this.tableData = res.data.data.list; 
        }
      });
    },