美文网首页
vue中axios的封装(简易版拦截,get,post)

vue中axios的封装(简易版拦截,get,post)

作者: 鸡毛菜菜子 | 来源:发表于2019-11-13 09:42 被阅读0次

第一步还是先下载axios

npm install axios --save

第二步/src/utils/目录下建立一个htttp.js

import axios from 'axios';

axios.defaults.timeout = 5000;// 请求超时时间

axios.defaults.baseURL =''";

/****** request拦截器==>对请求参数做处理 ******/

service.interceptors.request.use(config => {

    app.$vux.loading.show({

        text: '数据加载中……'

    });

    config.method === 'post'

        ? config.data = qs.stringify({...config.data})

        : config.params = {...config.params};

    config.headers['Content-Type'] = 'application/x-www-form-urlencoded';

    return config;

}, error => {  //请求错误处理

    app.$vux.toast.show({

        type: 'warn',

        text: error

    });

    Promise.reject(error)

});

/****** respone拦截器==>对响应做处理 ******/

service.interceptors.response.use(

    response => {  //成功请求到数据

        app.$vux.loading.hide();

        //这里根据后端提供的数据进行对应的处理

        if (response.data.result === 'TRUE') {

            return response.data;

        } else {

            app.$vux.toast.show({  //常规错误处理

                type: 'warn',

                text: response.data.data.msg

            });

        }

    },

    error => {  //响应错误处理

        console.log('error');

        console.log(error);

        console.log(JSON.stringify(error));

        let text = JSON.parse(JSON.stringify(error)).response.status === 404

            ? '404'

            : '网络异常,请重试';

        app.$vux.toast.show({

            type: 'warn',

            text: text

        });

        return Promise.reject(error)

    }

/**

* 封装get方法

* @param url

* @param data

* @returns {Promise}

*/

export function fetch(url,params={}){

  return new Promise((resolve,reject) => {

    axios.get(url,{

      params:params

    })

    .then(response => {

      resolve(response.data);

    })

    .catch(err => {

      reject(err)

    })

  })

}

/**

* 封装post请求

* @param url

* @param data

* @returns {Promise}

*/

export function post(url,data = {}){

  return new Promise((resolve,reject) => {

    axios.post(url,data)

          .then(response => {

            resolve(response.data);

          },err => {

            reject(err)

          })

  })

}

还有一种先创造实例axios对象,然后暴露axios实例对象的方式:https://blog.csdn.net/qq_38145702/article/details/81558816

第三步,在main.js中引入

import{post,get}from'./utils/http'//定义全局变量

Vue.prototype.$post=post;

Vue.prototype.$get=get;

最后在组件里直接使用

相关文章

网友评论

      本文标题:vue中axios的封装(简易版拦截,get,post)

      本文链接:https://www.haomeiwen.com/subject/bsiwzqtx.html