// 针对于axios做封装处理
// 引入axios
// 1. 创建一个基于axios的实例对象 axios.create()
// 1.1 baseURL 接口基地址
// 1.2 timeout 接口的最大等待时间 5-10s 如果超时直接干掉
// 1.3 大数处理 (处理数据超过js能表达的最大范围 + JSON.parse)
// 2. 请求拦截器
// 全局注入token request headers
// 3. 响应拦截器
// 1. token失效 401 http状态 跳回登录页重新获取token数据
// 2. 自定义错误处理 当后端接口不以http 是200- 300 以一个自定义的字段为主 success:true false
// 我们可以根据自定义字段的判断 手动 return Promise.reject(e) 就可以捕获到错误
import axios from 'axios'
import store from '@/store'
import router from '@/router'
// baseURL设置/超时时间设置
const instance = axios.create({
baseURL: 'http://pcapi-xiaotuxian-front.itheima.net/',
timeout: 5000
})
// 全局注入token
instance.interceptors.request.use(config => {
// 1. 获取token
const { token } = store.state.user
// 2. 请求头设置token
if (token) config.headers.Authorization = `Bearer ${token}`
return config
}, e => Promise.reject(e))
// token失效跳回到登录页 响应拦截器
instance.interceptors.response.use(
// 成功 (200 - 300)
res => res.data,
// 失败 (不介于200 - 300)
e => {
if (e.response && e.response.status === 401) {
const redirectUrl = encodeURIComponent(router.currentRoute.value.fullPath)
router.push('/login?redirectUrl=' + redirectUrl)
}
return Promise.reject(e)
}
)
// 封装一个函数 兼容get post请求的参数处理
// 可以根据用户传下来的请求method 自动适配当前接收我们参数的字段名称
/**
* @description: 兼容method的方法封装
* @param {string} url 接口url
* @param {string} method 接口method
* @param {Object} reqData 接口传递的参数 {} 对象的形式
* @return {promise}
*/
function request (url, method, reqData) {
return instance({
url,
method,
[method.toLowerCase() === 'get' ? 'params' : 'data']: reqData
})
}
// 业务场景使用样例
// request().then(res => {})
export default request
针对于axios做封装处理
最新推荐文章于 2023-06-27 16:30:10 发布