request.js - 其他

2023-05-29  本文已影响0人  xueyueshuai
// 文件 api/request.js
import axios from 'axios';
import store from '@/store'
import { Mseeage,Loading } from 'element-ui'

let reqCount = 0
let tokenFail = null
let loading;

const service = axios.create({
    baseURL:process.env.VUE_API, // VUE_API 在.env.development等文件中配置的环境变量 不同环境下的请求地址
    timeout:6000, // 请求超时时间
})

// 请求拦截器
service.interceptors.request.use(
    requset => {
        reqCount++
        loading = Loading.service({
            fullScreen:true, // 全屏loading
            background:'transparent' , // 背景色
        })
        if(store.user.token){ // 请求头添加 token与userName
            request.headers.token = store.user.token
            request.headers.userName = store.user.userName
        }
        return request
    },
    error => {
        loading.close()
        return Promise.reject(error)
    }
)

// 响应拦截器
service.interceptors.response.use(
    response => {
        reqCount--
        if(reqCount === 0) loading.close()
        if(response.data.respCode === 111){ // token失效处理
            if(!tokenFail){
                tokenFail = setTimeOut(() => {
                    store.dispatch('user/logout') // 退出登陆
                    Message.error(response.data.message) // 提示语
                    tokenFail = null
                    return new Promise.reject(new Error('token已失效'))
                },200)
            }
        }
        return response.data
    },
    error => {
        loading.close()
        reqCount--
        return Promise.reject(error)
    }
)

export default service

上一篇下一篇

猜你喜欢

热点阅读