目标:基于axios封装一个请求模块,调用接口时使用
- 添加实例化
- 请求拦截器
- 响应拦截器
- 封装一个通用的请求函数 (非必须)
import axios from 'axios'
const instance = axios.create({
// baseURL 基地址
baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net/',
timeout: 5000//超时时间配置
})
//请求拦截器
// 全局注册token
instance.interceptors.request.use(config => {
//注入token代码
return config
}, e => Promise.reject(e))
// 响应拦截器
//简化数据
//token失效 跳回登录页
// 当后端不是以200-300当作成功标识,而是自定义字段时,手动抛出错误
instance.interceptors.response.use(
(response)=>{ //在https状态码200-300
return response.data//这里多个点,返回的数据就少个点data
// 自定义字段
// const { success, message } = response.data
// if (success) {
// return response.dataa
// } else {
// return Promise.reject(message)
// }
},
(error) => {//不在在https状态码200-300
return Promise.reject(error)
}
)
// 封装一个函数,并不是必须的
// 为了api模块服务 方便使用接口函数的时候 可以不管当前是get请求还是post请求 统一参数传入
/**
* @description:
* @param {*} url 请求地址
* @param {*} method 请求方法 get/post
* @param {*} reqData 请求参数 必须是一个对象
* @return {*}
*/
export default function createAPI (url, method, reqData) {
return instance({
url,
method,
// reqData
[method.toLowerCase() === 'get' ? 'params' : 'data']: reqData
})
}