import router from '@/router'
导入store
import store from '@/store'
// 导出一个axios的实例 而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
// const service = axios.create() // 创建一个axios的实例
const service = axios.create({
// baseURL: 'http://ihrm-java.itheima.net', // 设置axios请求的基础的基础地址
baseURL: process.env.VUE_APP_BASE_API, // 设置axios请求的基础的基础地址
// withCredentials: true, // send cookies when cross-domain requests
timeout: 5000 // request timeout
})
//===========================================================
// 请求拦截器
service.interceptors.request.use(
config => {
// 如果有token就携带
const token = store.state.user.token
console.log('发请求,此时的token是', token)
// 这里要根据项目中的实际文档,看一下token的头是什么样子的
if (token) {
config.headers['Authorization'] = `Bearer ${token}`
}
return config
},
error => {
// do something with request error
console.log(error) // for debug
return Promise.reject(error)
}
)
//===========================================================
// 响应拦截器
service.interceptors.response.use(
response => {
console.log('响应拦截器', response)
if (response.data.success) {
// 操作成功.与后端约定,操作是否成功用success来表示
return response.data
} else {
// Promise.reject() 直接得到一个状态为rejected的promise对象
return Promise.reject(new Error(response.data.message))
}
},
error => {
// do something with request error
console.dir(error) // for debug
if (error.response && error.response.data && error.response.data.code === 10002) {
console.log('token失效了,当前的地址是:', router.currentRoute.fullPath)
// token失效了
store.dispatch('user/userLogout')
// .vue -- this.$route.fullPath
// .js -- router.currentRoute.fullPath
// 回去login页
// 补充回跳地址
router.push('/login?return_url=' + encodeURIComponent(router.currentRoute.fullPath))
} else {
return Promise.reject(error)
}
}
)
export default service // 导出axios实例
token中的·持久化设置
export default {
namespaced: true,
state: () => {
return {
userInfo: {},
token: getToken() || null // 初始token
}
},
mutations: {
// 设置新token
setToken(state, newToken) {
// vuex
state.token = newToken
// 持久化
setToken(newToken)
},
// 移除token
removeToken(state) {
// vuex
state.token = null
removeToken()
},
// 设置userInfo
setUserInfo(state, newUserInfo) {
state.userInfo = newUserInfo
}
},