Vue项目中Axios的封装

      通常在项目中会有大量的请求,若每个请求都单独处理,会出现大量重复代码,同时,对API的增删改查也不方便。所以需要对axios请求进行封装,使项目整洁易管理。主要分为两部分,首先,要对api统一管理;其次,对请求统一处理。

1、API统一管理

      将所有的api放到一个js文件里,示例如下:

// api.js

const Api = {
    Login:{
        url: '/login',
        method: 'post'
    },
    Info:{
        url: '/info',
        method: 'get'
    },
    Delete:{
        url: '/delete',
        method: 'delete'
    }
}
export default Api

2、请求统一封装

// Http.js

import axios from 'axios';
import Api from 'api';    // 代表上个代码段的文件

// 创建一个 axios 实例
let instance = axios.create({
    baseURL:'http://...',    //后台服务地址
    timeout:1000    //超时时间
})
// 包裹请求方法的容器
const Http = {}
//请求格式的统一,传入params,isFormData,config三个参数
for(let key in Api){
    let api = Api[key];
    // async的作用是避免进入回调地狱
    Http[key] = async function(
        params,    // 请求参数
        isFormData=fase,    // 是否是form-data请求
        config={}    // 配置参数
    ){
        let newParams = {};
        //content-type是否是form-data的判断
        if(params && isFormData){
            newParams = new FormData();
            for(let i in params){
                newParams.append(i,params[i]);
            }
        }else{
            newParams = params;
        }
        //请求的返回值
        var res = null;
        //不同请求的判断
        if(api.method === 'post'){
            try{
                res = await instance[api.method](api.url,newParams,config){}
            }catch(err){
                res = err;
            }
        }else{
            // delete和get请求
            config.params = newParams;
            try{
                res = await instance[api.method](api.url,config){}
            }catch(err){
                res = err;
            }
        }
        return res;
    }
}

// 请求拦截器
instance.interceptors.request.use(config=>{
    // 发起请求前做什么?如显示加载中的动画、对重复请求的二次拦截或给header添加token
    return config
},error=>{
    // 请求错误如何处理?如请求超时的处理
})

// 响应拦截器
instance.interceptors.response.use(response=>{
    // 请求成功,可在此统一处理与后端约定的状态码
    return response
},error=>{
    // 请求错误如何处理?如弹框提示错误信息
})

export default Http

      如上,请求封装好了,那么如何来调用封装好的请求呢?首先在main.js中将封装好的Http全局注册。

// main.js

import Http from 'Http';    // 代表上个代码段的文件
// 将Http 挂载到Vue实例上
Vue.prototype.$Http = Http;

      然后就可以在页面中调用方法啦~ 

// login.vue

methods:{
    async Login(){
        let res = await this.$Http.Login({name:'nie',psd:'***'})
        // 此处为请求返回的数据
        console.log(res);
    },
    async Info(){
        let res = await this.$Http.Info()
        // 此处为请求返回的数据
        console.log(res);
    },
    async Delete(){
        let res = await this.$Http.Delete({id:1})
        // 此处为请求返回的数据
        console.log(res);
    }
}

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值