在axios的基础上进行二次封装以方便调用接口以及统一管理接口
封装内容
首先创建了一个axios的实例,为了方便扩展,所以这个实例没有设置任何初始值。
const instance = axios.create()
请求拦截器
//请求前进行拦截并处理
instance.interceptors.request.use((config) => {
//项目上一般会使用后台返回的token作为请求的参数之一,所以在请求拦截器中统一添加了该内容
config.headers['token'] = sessionStorage.getItem('token') || '';
return config
}, error => {
console.log(error);
return Promise.reject(error);
})
响应拦截器
//请求前进行拦截并处理
instance.interceptors.response.use(response => {
//对返回状态为200的正常返回数据处理
if(response.status === '200' || response.status === 200) {
//如果code为0 (一般是这么设置具体设置以实际为准)
if(!response.data.code) {
return Promise.resolve(response.data.data);
}else {
//这个1000是我自己项目常用的设置(以实际为准)
if(response.data.code === '1000' || response.data.code === 1000) {
// 1000为token失效或者错误进行重定向登录
//antd的message组件提示
message.error(response.data.message);
window.location.href('/login');
}else {
//antd的message组件提示
message.error(response.data.message);
throw Promise.reject(response.data.message);
}
}
}else {
message.error(response.data.message);
return Promise.reject(response.data.message);
}
}, error => {
return Promise.reject(error);
})
请求
单独get请求
export const getRequire = (url, params, config ={}) => {
return new Promise((resolve, reject) => {
instance.get(url, params).then(response => resolve(response)).catch(error => reject(error));
})
}
单独post请求
export const postRequire = (url, params, config={}) => {
return new Promise((resolve, reject) => {
instance.post(url, params).then(response => resolve(response)).catch(error => reject(error));
})
}
整合请求
在这里可以不断添加各个特殊请求,如postjson、formData等多种特殊请求
export const requireApi = (values, params, config = {}) => {
// 默认是post请求
const { url = '', baseUrl = '', type = 'post' } = values;
let realUrl = baseUrl + url;
switch(type) {
case 'post': return new Promise((resolve, reject) => {
instance.post(realUrl, params).then(response => resolve(response)).catch(error => reject(error));
})
case 'get': return new Promise((resolve, reject) => {
instance.get(realUrl, { params }).then(response => resolve(response)).catch(error => reject(error));
})
default: return new Promise((resolve, reject) => {
instance.get(realUrl, { params }).then(response => resolve(response)).catch(error => reject(error));
})
}
}
接口统一管理
项目基准请求路径
如果有外部项目引入则可以多设置几个基准请求路径
const baseUrl = '/test'
项目中请求接口
//例子如下
export const apis = {
// <--------------------------------------- 登录页 ---------------------------------->
// 测试服务器端连接是否正常
testConnect: { baseUrl: baseUrl, url: '/data/testConnect', type: 'get' },
// 获取token
getToken: { baseUrl: baseUrl, url: '/data/getToken', type: 'get' },
}
使用方法
在页面上请求接口访问数据
//无参数
requireApi(apis.testConnect).then(() => {
console.log(`服务器端通讯正常`);
}).catch(error => {
console.log(`服务器端通讯异常`);
})
//带参数与返回值
requireApi(apis.getUserToken, params).then(value => {
console.log(value);
}).catch(err => {
console.log('请求异常');
})
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!