封装axios请求拦截器
在现在的项目中,axios的使用是非常高的,随之而来的各种http请求状态拦截也是必然的操作,所以这里封装了一个基于axios的HTTP请求,并进行全局状态的拦截和状态的信息的返回。
首先在我们src下建立一个service文件夹,分别建立三个js文件:api.js,http.js,index.js,
首先将请求的路径进行处理和获取,在api.js中进行处理并暴露该方法:
const prefix = 'http://xxx:xxxx';
export default(config => {
return Object.keys(config).reduce((copy, name) => {
copy[name] = `${prefix}${config[name]}`;
return copy
}, {})
})
({
"_login": "/api/xxx",
"_getMenus":"/app-auth/auth/visible/menu"
})
然后再对我们的aiox做一个全局的拦截器,并暴露出去,这一步我们放到http.js中进行处理
import axios from 'axios'
axios.defaults.timeout = 100000;
// axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
axios.interceptors.request.use(config => {
// console.log(config,'config')
return config
});
axios.interceptors.response.use(response => {
// 这里的code根据服务端返回的结构进行获取和配置,具体获取可以打印response查看
if (response.data.code === 10002 || response.data.code === 10004 || response.data.code === 10001 || response.data.code === 10005 || response.data.code === 0) {
return response.data
} else {
// 非200请求
throw Error(response.data.msg || '服务异常')
}
}, error => {
console.log(error);
});
export default axios
最后我们在index.js中进行使用:
import http from './http.js' // 导入我们封装好的axios对象
import api from './api.js' // 导入我们封装好的api对象
import qs from 'qs'
export function _getMenus(params={}){
// console.log(params,'params,菜单id')
return http.get(`${api._getMenus}?userId=${params.userId}`, ) // return对应的get/post方法,第一个填路径,第二个给参数对象
}
export function _login(params={}){
// console.log(params,'登陆接口出传入的参数')
return http.post(api._login, qs.stringify(params.data)) // return对应的get/post方法,
}
这样就可以了,最后是我们的如何使用:(此处仅为在react中的示范)
import {_getMenus} from "./servers/index.js"; // 通过inport 引入暴露的方法
_getMenus({传入的参数名称: 参数}).then(data => {
if (data.code === 0 && data.data.list) {
_this.setState({
list:data.list
})
}
}).catch(err => {
alert(err)
})
三人行,必有我师

浙公网安备 33010602011771号