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 の導入が完了しました