import axios from 'axios' import { tansParams } from './common' import router from '@/router' import { ElMessage } from 'element-plus' import { getToken, removeToken} from './token' // 创建axios实例 const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: "/api", // 超时 timeout: 60000 }) service.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' // 请求拦截器 service.interceptors.request.use( config => { // 是否需要设置 token const isToken = (config.headers || {}).isToken === false // 每次发送请求之前判断是否存在token // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录状态,进而判断是否有权限访问 if (getToken() && !isToken) { config.headers['Authorization'] = getToken() } // get请求映射params参数 if (config.method === 'get' && config.params) { let url = config.url + '?' + tansParams(config.params); url = url.slice(0, -1); config.params = {}; config.url = url; } // post和put请求 if (config.method === 'post' || config.method === 'put') { config.data = JSON.stringify(config.data) } return config } ) // 响应拦截器 service.interceptors.response.use( response => { const res = response.data console.log(res); if (res.code !== 200) { if (res.code === 401) { ElMessage.error("登录失效,请重新登录!") removeToken(); // 删除本地token router.push("/login") return Promise.reject(new Error(res.message || 'Error')) } else if (res.code === 403) { ElMessage.error('无权访问!') return Promise.reject(new Error(res.message || 'Error')) } } return res }, error => { console.log('err' + error) // for debug if (error.status == 403) { ElMessage.error('无权访问!') } else { ElMessage.error('服务异常!') } return Promise.reject(error) } ) export default service