import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router'
// 创建一个axios的实例
const service = axios.create({
// baseURL: 'http://xxx.xx.xx.x:xxxx', // axios请求基地址
baseURL: process.env.VUE_APP_BASE_API,
timeout: 5000 // 定义5秒超时
})
// 请求拦截器
service.interceptors.request.use(function(config) {
// 在发送请求之前做些什么
// console.log(config)
if (store.state.user.token) {
// 给config.headers(请求头)身上添加一个Authorization属性(Authorization 和 Bearer 为后端指定写法)
config.headers['Authorization'] = 'Bearer ' + store.state.user.token
}
return config
}, function(error) {
// 对请求错误做些什么
return Promise.reject(error)
})
// 响应拦截器
service.interceptors.response.use(response => {
if (response.data.success) {
// 操作成功
// console.log(response)
return response.data // 在返回有效数据时,直接返回res.data, 避免获取有效数据代码冗余
} else { // 如果success为false 业务出错,直接触发reject
return Promise.reject(new Error(response.data.message)) // 返回错误信息
}
}, error => {
// console.dir(error)
if (error.response.data.code === 10002) { // token过期
Message({
duration: 1000,
message: 'token过期,请重新登录!',
type: 'error'
})
store.dispatch('user/logout') // 调用执行退出方法,删除token和用户信息
router.push('/login') // 回到登录页
}
return Promise.reject(error) // 返回执行错误 让当前的执行链跳出成功 直接进入 catch
})
export default service
(02/06/21) request
最新推荐文章于 2023-05-28 00:30:03 发布