封装的意义

1.提高代码可读性
2.提高代码可维护性
3.减少代码书写

封装

import axios from 'axios'
axios.defaults.baseURL = 'http://127.0.0.1:8000' // 全局设置网络超时
axios.defaults.timeout = 10000; //设置请求头信息
axios.defaults.headers.post['Content-Type'] = 'application/json';
axios.defaults.headers.put['Content-Type'] = 'application/json'; axios.interceptors.request.use(
config => {
// 每次发送请求之前判断是否存在token,如果存在,统一在http请求的header都加上token,不用每次请求都手动添加
const token = localStorage.getItem('token')
// console.log(token)
if(token){
config.headers.Authorization = 'JWT' + token
}
return config;
},
error => {
return Promise.error(error);
}) axios.interceptors.response.use(
//请求成功
// res => res.status === 200 ? Promise.resolve(res) :
Promise.reject(res),
res => {
if(res){
//加上201是因为modelviewset的post请求成功的状态码是201
if(res.status === 200 || res.status === 201){
return Promise.resolve(res)
}
}
},
//请求失败
error => {
if(error.response){
// 判断⼀下返回结果的status == 401? ==401跳转登录⻚⾯。 !=401passs
// console.log(error.response)
if (error.response.status === 401){
// 跳转不可以使⽤this.$router.push⽅法、
// this.$router.push({path:'/login'})
window.location.href = 'http://127.0.0.1:8888/'
}else{
// errorHandle(response.status, response.data.message);
return Promise.reject(error.response);
}
// 请求已发出但是不在2xx的范围
}else {
// 处理断⽹的情况
// eg:请求超时或断⽹时,更新state的network状态
// network状态在app.vue中控制着⼀个全局的断⽹提示组件的显示隐藏
// 关于断⽹组件中的刷新重新获取数据,会在断⽹组件中说明
// store.commit('changeNetwork', false);
return Promise.reject(error.response);
}
}
) //封装axios
//封装get请求
export function axios_get(url,params){
return new Promise(
(resolve,reject)=>{
axios.get(url,{params:params}).then(res=>{
// console.log("封装信息的的res", res)
resolve(res.data)
}).catch(err=>{
reject(err.data)
})
}
)
} //封装post请求
export function axios_post(url,data){
return new Promise(
(resolve,reject)=>{
// console.log(data)
axios.post(url,JSON.stringify(data)).then(res=>{
// console.log("封装信息的的res", res)
resolve(res.data)
}).catch(err=>{
reject(err.data)
})
}
)
} //封装put请求
export function axios_put(url,data){
return new Promise(
(resolve,reject)=>{
// console.log(data)
axios.put(url,JSON.stringify(data)).then(res=>{
// console.log("封装信息的的res", res)
resolve(res.data)
}).catch(err=>{
reject(err.data)
})
}
)
} //封装delete请求
export function axios_delete(url,data){
return new Promise(
(resolve,reject)=>{
// console.log(data)
axios.delete(url,{params:data}).then(res=>{
// console.log("封装信息的的res", res)
resolve(res.data)
}).catch(err=>{
reject(err.data)
})
}
)
}
//⼀定要导出函数
export default axios;

  

使用

//将我们http.js中封装好的 get,post.put,delete 导过来
import {axios_get,axios_delete,axios_post,axios_put} from './http.js'
export const user_add = p => axios_post("/app02/user/", p) // 获取七⽜云token

  

<script>
// 导入axios函数
import {user_add} from '../api/api'
export default {
data(){
return{
username:'',
age:'',
home:'',
hight:'',
roles:'',
classrooms:'',
}
},
methods:{
add(username){
let data={
"username":this.username,
"age":this.age,
"home":this.home,
"hight":this.hight,
"roles":[this.roles],
"classrooms":this.classrooms
}
//直接使用导入的axios函数
user_add(data).then(res=>{
console.log(res)
if(res.code==200){
alert('添加成功')
sessionStorage.setItem("username",username)
this.$router.push({path:'/userdel'})
}else {
alert('添加失败')
}
}).catch(error=>{
console.log(error)
})
}
},
}
</script>

  

最新文章

  1. win8.1中安装sql2014 0x800F0906 【 Error while enabling Windows feature : NetFx3, Error Code : -2146498298 】
  2. Oracle 外连接和 (+)号的用法
  3. php里session的用法
  4. Mybatis like 模糊查询问题
  5. 运行所有sdk目录下的示例,查看它们的功能,方便以后查寻
  6. js key事件 keyCode大全
  7. Http协议学习小结
  8. JQuery 之事件中的 ----- hover 与 onmouseover 、onmouseout 联系
  9. java代码中获取进程process id(转)
  10. 正确AJAX了解该技术的,创建,应用
  11. BZOJ 1497: [NOI2006]最大获利(最大权闭合子图)
  12. 阿里云学习之IOT物联网套件(客户端与服务端的后台数据传输)
  13. JAVA RPC (四) 之thrift序列化普通对象
  14. Azure 国内版 如何用powershell修改linux系统的密码
  15. Vue:如何在vue-cli中创建并引入自定义组件
  16. FTR-B3GA003Z-信号继电器
  17. C#内存映射文件消息队列实战演练(MMF—MQ)
  18. go语言编程入门
  19. 用了快1年的MacBook Pro遇到的硬件问题
  20. dedicated bearer

热门文章

  1. 4G DTU是什么 4G DTU的功能和特点
  2. 1到n整数中1出现的次数
  3. FullCalendar v5.3.2版本制作一个航班日历Demo
  4. 微信小程序获取请求数据
  5. 老师问学生while判断
  6. C++动态存储方式与静态存储方式
  7. mvc SelectList 给下拉框 @Html.DropDownList绑定值
  8. 【转】jps 命令使用
  9. 聊一聊sockmap 以及ebpf
  10. 配置内网访问的TV