import axios from 'axios'
import store from '@/store'
import router from '@/router'
// 1.实例化 create方法
// baseURL 接口根路径
// timeout 接口最长等待时间
const instance = axios.create({
baseURL: 'http://pcapi-xiaotuxian-front.itheima.net/',
timeout: 5000
})
// 2.请求拦截器
// 全局注入token
// 请求拦截器支持多个,会按照先添加后执行的顺序依次执行 前面执行的拦截器处理后的config会作为后面拦截器的入参继续处理
// 多个拦截器处理完毕的config回作为接口的正式请求参数
instance.interceptors.request.use(config => {
// 1.获取token
const { token } = store.state.user.profile
// 2.请求头设置token
if (token) config.headers.Authorization = `Bearer ${token}`
return config
}, e => Promise.reject(e))
// 3. 响应拦截器
// 监控http状态码 401
// const {success,data} =res
// if(success){return data} else{return Promise.reject(e)}
instance.interceptors.request.use(
(response) => {
return response
},
(e) => {
if (e.response && e.response.status === 401) {
const redirectUrl = encodeURIComponent(router.currentRoute.value.fullPath)
router.push('/login?redirectUrl=' + redirectUrl)
}
return Promise.reject(e)
}
)
/**
* @description: axios请求的封装方法
* @param {*} url 请求路径
* @param {*} method 请求方法
* @param {*} reqData 请求参数(必须是对象类型)
* @return {*} promise对象
*/
export default function request (url, method, reqData) {
return instance({
url,
method,
[method.toLowerCase() === 'get' ? 'params' : 'data']: reqData
})
}