美文网首页
vue中axios的封装

vue中axios的封装

作者: 阴魏什么wjl | 来源:发表于2018-05-10 19:26 被阅读0次

    axios的封装会在项目开发中减少代码的书写量:

    安装axios

    npm install axios -D 

    封装axios

    新建http.js文件

    import axios from 'axios'

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

    axios.defaults.baseURL ='';   //设置接口公共部分

    设置request  和response拦截

    //http request 拦截器

    axios.interceptors.request.use(

      config => {

        config.data = JSON.stringify(config.data);

        config.headers = {

          'Content-Type':'application/x-www-form-urlencoded'

        }

        return config;

      },

      error => {

        return Promise.reject(err);

      }

    );

    //http response 拦截器

    axios.interceptors.response.use(

      response => {

        if(response.data.errCode ==2){

          router.push({

            path:"/login",

            querry:{redirect:router.currentRoute.fullPath}//从哪个页面跳转

          })

        }

        return response;

      },

      error => {

        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)

              })

      })

    }

    /**

    * 封装patch请求

    * @param url

    * @param data

    * @returns {Promise}

    */

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

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

        axios.patch(url,data)

            .then(response => {

              resolve(response.data);

            },err => {

              reject(err)

            })

      })

    }

    /**

    * 封装put请求

    * @param url

    * @param data

    * @returns {Promise}

    */

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

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

        axios.put(url,data)

            .then(response => {

              resolve(response.data);

            },err => {

              reject(err)

            })

      })

    }

    在入口文件main.js中引入axios  和 http

    import axios from 'axios'

    import {post,fetch,patch,put} from './http'

    //定义全局变量

    Vue.prototype.$post=post;

    Vue.prototype.$fetch=fetch;

    Vue.prototype.$patch=patch;

    Vue.prototype.$put=put;

    最后在组件里直接使用

    mounted(){

        this.$post('/api/xxxx')

          .then((response) => {

            console.log(response)

          })

      },

    相关文章

      网友评论

          本文标题:vue中axios的封装

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