小白入门vue的坎,实际开发中axios都会进行二次封装再使用,主要是为了网络请求拦截进行权限验证。 包结构如下 utils的request.js是对axios的二次封装处理 api是放使用网络接口的请求 view是放视图层即页面 直接看demo,注释都描述清楚了 request.js
import axios from 'axios'
import { Message } from 'element-ui';
const baseURL = {
GATEWAY1: 'http://localhost:8080',
GATEWAY2: 'http://localhost:8090'
}
const instance = axios.create({
timeout: 5000,
headers: {
'Content-Type': 'application/json',
},
})
instance.interceptors.request.use(
config => {
const token=localStorage.getItem("token")
token && (config.headers.Authorization = token);
return config;
},
error => {
return Promise.reject(error);
}
)
instance.interceptors.response.use(
(res) => {
if(res.status === 200) {
if (res.data.code !== '0' && res.data.msg) {
Message.info(res.data.msg);
}
return Promise.resolve(res)
} else {
return Promise.reject(res)
}
},
(error) => {
const { response } = error;
if (response) {
errorHandle(response.status, response.data.msg);
return Promise.reject(response);
} else {
Message.error('网络异常')
}
}
)
const errorHandle = (status, other) => {
switch (status) {
case 403:
Message.info('登录过期,请重新登录');
setTimeout(() => {
}, 1000);
break;
case 404:
Message.info('网络请求不存在');
break;
default:
Message.info(other);
}
}
export default {
$axios: instance,
BASE_URL: baseURL
}
user.js
export function getList(data) {
return request.$axios({
url: request.BASE_URL.GATEWAY1 + '/ad/getList',
method: 'get',
data,
}).then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
}
在这里插入代码片
user.vue
<template>
</template>
<script>
import user from '../api/user'
export default {
data () {
return {
page:{
pagesize:"",
pagenum:""
}
}
},
methods:{
getList(){
user.getList(data.page);
}
}
}
</script>
<style scoped>
</style>
demo已经放到码云上,码云地址
|