美文网首页VueAxios
vue axios 接口封装

vue axios 接口封装

作者: 赵伟敏_19 | 来源:发表于2018-11-09 17:02 被阅读263次

    准备工作 vue-cli 创建一个新项目

    vue-cli

    axios中文说明文档

    1.安装axios

    npm install axios --save

    2. 在是src目录下创建一个server文件夹,在文件夹下面创建两个文件http.js 和api.js 

    3. http文件中封装get.post等 

    import axios from 'axios'

    // 设置请求超时时间和域名

    axios.defaults.timeout = 5000

    axios.defaults.baseURL = 'http://localhost:3000'

    //  http request 拦截器

    axios.interceptors.request.use(

      config => {

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

        config.headers = {

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

        }

        return config

      }, err => {

        return Promise.reject(err)

      }

    )

    //  响应拦截器即异常处理

    axios.interceptors.response.use(response => {

      return response

    }, err => {

      if (err && err.response) {

        switch (err.response.status) {

          case 400:

            console.log('错误请求')

            break

          case 401:

            console.log('未授权,请重新登录')

            break

          case 403:

            console.log('拒绝访问')

            break

          case 404:

            console.log('请求错误,未找到该资源')

            break

          case 405:

            console.log('请求方法未允许')

            break

          case 408:

            console.log('请求超时')

            break

          case 500:

            console.log('服务器端出错')

            break

          case 501:

            console.log('网络未实现')

            break

          case 502:

            console.log('网络错误')

            break

          case 503:

            console.log('服务不可用')

            break

          case 504:

            console.log('网络超时')

            break

          case 505:

            console.log('http版本不支持该请求')

            break

          default:

            console.log(`连接错误${err.response.status}`)

        }

      } else {

        console.log('连接到服务器失败')

      }

      return Promise.resolve(err.response)

    })

    /**

    * 封装get方法

    * @param url

    * @param data

    * @returns {Promise}

    */

    function get (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}

    */

    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}

    */

    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}

    */

    function put (url, data = {}) {

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

        axios.put(url, data)

          .then(response => {

            resolve(response.data)

          }, err => {

            reject(err)

          })

      })

    }

    //  开放接口

    export default {

      get: get,

      post: post,

      put: put,

      patch: patch

    }

    4. 在api中编辑测试接口

    import http from './http'

    export const api = {

      getProductList: function (paramObj) {

        return http.get('/product/list', paramObj)

      }

    }

    5. 在main.js中设置全局变量

    import {api} from './server/api'

    // 定义全局变量

    Vue.prototype.$api = api

    6.在vue组件中调用

    export default {

      name: 'homeIndex',

      data () {

        let paramObj = {

          page_no: 1,

          page_size: 10

        }

        this.$api.getProductList(paramObj).then(data => {

          console.log(data)

        })

        return {

          list: []

        }

      }

    }

    相关文章

      网友评论

        本文标题:vue axios 接口封装

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