vue封装axios且实现api的统一管理

一. 安装

// 安装
    cnpm install  axios 

二.封装

在src目录下面新增request文件夹。然后新增api文件夹,存放我们各个模块的api,新增index.js为各个模块api的统一出口。然后新增Http.js封装axios。
目录结构
Http.js中的代码

import axios from 'axios'
import qs from 'qs'
// element引入
// import ElementUI from 'element-ui'
// 请求超时时间,10s
const timeOut = 10 * 1000
    // 请求域名
const baseurl = 'http://admin.gxxmglzx.com/tender/test'
    // 系统全局请求对象
const service = axios.create({
        baseURL: baseurl,
        timeout: timeOut,
        responseType: 'json'
    })
    // axios拦截器,发送请求之前操作
service.interceptors.request.use(config => {
    // console.log(config)
    return config
})

service.interceptors.response.use(
        response => {
            if (response.status === 200) {
                if (response.data.errcode !== 200) {
                    // ElementUI.Message({
                    //     message: response.data.msg,
                    //     type: 'error'
                    // })
                    return response
                } else {
                    return Promise.resolve(response)
                }
            } else {
                return Promise.reject(response)
            }
        },
        error => {
            if (error.response.status) {
                console.log('进入错误')
                    //   ElementUI.Message({
                    //     message: error.response.data.error,
                    //     type: 'error'
                    //   })
                return Promise.reject(error.response)
            }
        }
    )
    // 请求方法
const http = {
    post(url, params) {
        return service.post(url, params, {
            transformRequest: [(params) => {
                return qs.stringify(params)
            }],
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        })
    },
    put(url, params) {
        return service.put(url, params, {
            transformRequest: [(params) => {
                return qs.stringify(params)
            }],
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        })
    },
    get(url, params) {
        let _params
        if (Object.is(params, undefined)) {
            _params = ''
        } else {
            _params = '?'
            for (const key in params) {
                // eslint-disable-next-line no-prototype-builtins
                if (params.hasOwnProperty(key) && params[key] !== null) {
                    _params += `${key}=${params[key]}&`
                }
            }
        }
        return service.get(`${url}${_params}`)
    },
    delete(url, params) {
        let _params
        if (Object.is(params, undefined)) {
            _params = ''
        } else {
            _params = '?'
            for (const key in params) {
                // eslint-disable-next-line no-prototype-builtins
                if (params.hasOwnProperty(key) && params[key] !== null) {
                    _params += `${key}=${params[key]}&`
                }
            }
        }
        return service.delete(`${url}${_params}`)
    },
    upload(url, params) {
        return service.post(url, params, {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        })
    }
}

export default http

home.js中的代码

import $http from '@/request/Http'

const homeApi = {
    getCategroy(params) {
        return $http.get('/get_type', params)
    }
}

export default homeApi

api中的index.js 内容如下,index.js的功能就是统一导出各模块api,这样我们就不用在main.js中一个个去引入了。

/* *
 * api导出
 */

import homeApi from '@/request/api/home'

export default {
    homeApi
}

在main.js中导入api文件夹,并挂载

import api from './request/api/index'

Vue.prototype.$api = api

最后在实际页面的使用

<template>
  <div>
    111
  </div>
</template>

<script>
export default {
  methods: {

  },
  created() {
    this.$api.homeApi.getCategroy().then(res => {
      console.log(res)
    })
  }
}
</script>

<style lang="scss" scoped></style>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值