zoukankan      html  css  js  c++  java
  • vue项目中axios封装总结

    日常业务中我们通常会对axios进行封装来使用,这么做的好处是:我们可以在每次请求前对请求做处理还可以对错误进行统一处理,从而避免每次发请求都要做重复的工作。比如:我们每次发送请求前都需要对请求的url做处理,就可以用到axios请求拦截;对后端返回的错误或网络错误通过响应拦截进行统一处理 等等。

    //fetch.js
    const fetch = Axios.create({
            withCredentials: true,
            baseURL:baseURL,
            validateStatus: function (status) {
                return status >= 200 && status < 404; // 默认的
            },
        })
        //请求发送前拦截,根据地址重新配置域名,再子路由请求时必须加/ 例如:请求 localhost:80/app/inset  fetch.get('/app/inset');
        fetch.interceptors.request.use(function (config) {
            // let url=config.url;
            // //判断是否是全地址,全地址不做转换,非全地址根据二级参数判断请求的域名
            // if(!url.startsWith("http://")&&process.env.NODE_ENV==='development'){
            //     config.url=baseURL[url.split('/')[1]]+url;
            // }
            return config;
        }, function (error) {
            // 对请求错误做些什么
            return Promise.reject(error);
        });
    
        // 添加响应拦截器  后台登录状态判断和权限控制时很有用
        fetch.interceptors.response.use(function (response) {
            // 对响应数据做点什么
            if(response.data.status!=200||response.status!=200){
                if(response.data.status==403||response.status==403){
                    Message({
                        type:'error',
                        message:'未登录',
                    });
                    store.commit("clert_store");
                    router.push('/login')
                }else if(response.data.status==301||response.status==301){
                    Modal.error({
                        title: '权限提示',
                        content: '暂无权限访问'
                    });
                }
            }
            // console.log(response)
            return response.data;
        }, function (error) {
            Message.error('请求失败,请检查网络');
            // 对响应错误做点什么
            return Promise.reject(error);
        });
    
    export default fetch;
    //main.js  
    //把请求方法放到Vue的原型链上 这样在其他页面通过 this.$http.get/post(...)就可以使用了
    import fetch from './request/fetch'
    
    Vue.prototype.$http={
      get(url,base,config){
        let data={params:base};
        return fetch(url,data,config);
      },
      post(...arr){
        return fetch.post(...arr);
      },
      put(url,base,config){
        // let data={data:base};
        let data=base;
        return fetch.put(url,data,config)
      },
      delete(url,base,config){
        let data={data:base};
        return fetch.delete(url,data,config);
      }
    }
    //页面中使用
    this.$http.get(url).then(res=> {
            let data = res;
            if (data.status == 200) {
             //do something
            }
          })
    

      

  • 相关阅读:
    (0)git安装
    [SCOI2008]奖励关
    bzoj1007 [HNOI2008]水平可见直线
    【bzoj1060】[ZJOI2007]时态同步
    【bzoj2705】[SDOI2012]Longge的问题
    【bzoj3505】[Cqoi2014]数三角形
    【bzoj3747】[POI2015]Kinoman
    P1072 Hankson的趣味题
    poj1845 数论 快速幂
    【bzoj1965】[Ahoi2005]SHUFFLE 洗牌
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/13096184.html
Copyright © 2011-2022 走看看