vue 프로젝트에 토큰 또는 기타 인증 정보를 추가하여 사용할 axios를 간단히 캡슐화합니다.

vue项目中axios的简单封装
一
创建hader.js
import Vue from 'vue'
import axios from "axios"
// import router from './router'
import router  from '../../router'
// element_ui
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);


axios.defaults.withCredentials = false
//类型Jion 格式  字符utf-8
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';


//请求拦截器
axios.interceptors.request.use(confirm => {
    
    
    let token = JSON.parse(window.localStorage.getItem('user'))
    
    token && (confirm.headers.token = token.token)

    let pwd = JSON.parse(window.localStorage.getItem('user'))
    // console.log(55555,pwd.password)
    pwd && (confirm.headers.pwd = pwd.password)

    let client_time_sign = new Date().setDate(new Date().getDate() -28) / 1000 * 1.28;
    // console.log(222,new Date().getDate())
    client_time_sign && (confirm.headers.client_time_sign = client_time_sign)
// console.log(55555,new Date().setDate(new Date().getDate() -7))
    return confirm
}, error => {
    
    
//   console.log("error")
    return Promise.reject(error)
})

//相应拦截器
axios.interceptors.response.use(response => {
    
    
//   console.log(1111)
    // console.log(response)
    if (response.status === 200) {
    
    
        // console.log(router)
        // router.push('/login')
        if (response.data.code == 8003) {
    
    
            ElementUI.Message({
    
    
                message: "当前时间与网络时间不同步,请调整后重试!",
                type: 'warning'
            });
            return reponse;
        }
        if (response.data.code == 5005) {
    
    
            ElementUI.Message({
    
    
                message: "token验证失败,请重新登录验证!",
                type: 'warning'
            });
            router.push('/')
            return reponse;
        }
        return Promise.resolve(response)
    } else {
    
    
        return Promise.reject(response)
    }
}, error => {
    
    
//   console.log(error)
//   return error
    if (error.response.status) {
    
    
        switch (error.response.status) {
    
    
            case 401:
                router.replace({
    
    
                    path: '/',
                    query: {
    
    
                        redirect: router.currentRoute.fullPath
                    }
                });
                break;
            default:
                ElementUI.Message({
    
    
                    message: error.response.data.message,
                    type: 'warning'
                });
        }
        return Promise.reject(error.response);
    } else {
    
    
        return Promise.reject(error)
    }
})

export default axios;

코드에는 세 가지 조건이 있습니다: 토큰 pwd 및 client_time_sign 타임스탬프 토큰 및 pwd는 로그인할 때 백그라운드에서 반환되는 데이터의 데이터입니다. client_time_sign은 타임스탬프이며 현재 타임스탬프를 사용할 수 없습니다. 그 중 ruoter.push("/")는 로그인 페이지이며 인증 실패 시 로그인 페이지로 돌아갑니다. man.js의 간단한 axios 캡슐화 토큰에 hader.js를 도입하는 작업이 완료되었습니다.

추천

출처blog.csdn.net/weixin_56723577/article/details/122875303