vue分享个人封装axios

1 篇文章 0 订阅

1.引入axios

npm i axios --save

2.新建index.js

import axios from 'axios'

import { Message, MessageBox } from 'element-ui'
import router from '@/router'
//接口
export const baseURL = 'https://'

//请求拦截
axios.interceptors.request.use(config => {
    let token = localStorage.token
    if (token) {
        config.headers.Token = token
    }
    return config
}, error => {
    return Promise.reject(error)
})

let timer = null

//响应拦截器
axios.interceptors.response.use(res => {
    if (res.data.code === 110) {
        if (timer) clearTimeout(timer)
        timer = setTimeout(() => {
            MessageBox.confirm(`${ res.data.msg },请重新登录!` || '请求失败!请于管理员联系!', '提示', {
                type: 'warning'
            }).then(() => {
                localStorage.clear()
                sessionStorage.clear()
                router.replace({ name: 'login' }).then(() => {
                    location.reload()
                })
            })
        }, 500)
    }
    // 稍后可以做一些处理
    return res
}, error => {
    if (timer) clearTimeout(timer)
    timer = setTimeout(() => {
        Message({
            type: 'error',
            message: error.message || '请求失败!请于管理员联系!',
            duration: 3000,
            showClose: true
        })
    }, 500)
    return Promise.reject(error)
})

function Axios (options) {
    const config = {
        timeout: 35000,
        baseURL,
        ...options
    }
    config.headers = {
        'Content-Type': 'application/json'
    }
    return new Promise((resolve, reject) => {
        axios(config).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}


router.beforeEach((to, form, next) => {
    if (to.fullPath.includes('/login'))  return next()
    if (!localStorage.token) {
        Message({
            type: 'error',
            message: '您的身份信息有误,请重新登录!',
            duration: 5000,
            showClose: true
        })
        return next({ name: 'login', replace: true })
    }
    next()
})
export default {
    get: ({ url, data, params }) => Axios({ method: 'GET', url, data, params }),
    post: ({ url, data, params }) => Axios({ method: 'POST', url, data, params }),
    put: ({ url, data, params }) => Axios({ method: 'PUT', url, data, params }),
    delete: ({ url, data, params }) => Axios({ method: 'DELETE', url, data, params })
}

3.新建请求api.js文件

import request from './'


// 登录
function login (data, params) {
    return request.post({
        url: '/login',
        data,
        params
    })
}




const userApi = {
    // 添加
    add: (data, params) => request.post({ url: '/请求地址', data, params }),
    // 编辑
    update: (data, params) => request.post({ url: '/请求地址', data, params }),
    // 获取列表
    getPageList: (data, params) => request.post({ url: '/请求地址', data, params }),
    // 获取树形下拉
    getTreeList: (data, params) => request.post({ url: '/请求地址', data, params }),
    // 删除
    // delete: (data, params) => request.post({ url: '/请求地址', data, params }),
}

export default {
    login,
    userApi
}

4.main.js引入api.js

import Vue from 'vue'
import App from './App.vue'
import store from './store'
import router from './router'

import Api from './api/api.js'



Vue.config.productionTip = false
//关键代码,挂载在vue原型上
Vue.prototype.$api = Api
new Vue({
    store,
    router,
    render: h => h(App)
}).$mount('#app')

这样的话我们在请求接口时就可以直接使用:

//params参数
this.$api.userApi.getPageList(params)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值