1 src目录结构
2 main.js -- 引入全局样式文件+全局路由钩子配置文件
3 utils配置文件 -- request.js 封装 axios 请求函数
3.1 使用 interceptors 配置请求拦截器
// request拦截器
service.interceptors.request.use(
config => {
if (store.getters.token) {
config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
},
error => {
// Do something with request error
console.log(error) // for debug
Promise.reject(error)
}
)
3.2 使用 interceptors 配置响应拦截器
// response 拦截器
service.interceptors.response.use(
response => {
// code为非20000是抛错 可结合自己业务进行修改
const res = response.data
if (res.code !== 0 && res.statusCode !== '200') {
Message({
message: res.msg || res.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject('error')
} else {
return response.data
}
},
error => {
console.log(error) // for debug
if (error.response && error.response.status === 401) {
MessageBox.confirm(
'你已被登出,可以取消继续留在该页面,或者重新登录',
'确定登出',
{
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
store.dispatch('FedLogOut').then(() => {
location.reload() // 为了重新实例化vue-router对象 避免bug
})
})
} else {
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
}
)
4 api 文件夹分模块封装请求方法
4.1 页面中引入对应js文件
4.2 页面中使用 -- 分模块封装的请求方法
4.3 在 store 的模块中也可直接引入调用