トークンまたはその他の検証情報を 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;

コードには 3 つの条件があります: トークン pwd と client_time_sign タイムスタンプ. トークンと pwd は、ログイン時にバックグラウンドによって返されるデータ内のデータです. client_time_sign はタイムスタンプであり、現在のタイムスタンプは使用できません. 全会一致. このうち ruoter.push ("/") はログインページで、認証に失敗するとログインページに戻ります。man.js の単純な axios カプセル化トークンへの hader.js の導入が完了しました

おすすめ

転載: blog.csdn.net/weixin_56723577/article/details/122875303