封装的意义

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>

  

xios封装的更多相关文章

  1. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. iOS开发之App间账号共享与SDK封装

    上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...

  3. Ajax实现原理,代码封装

    都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...

  4. 用C语言封装OC对象(耐心阅读,非常重要)

    用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...

  5. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~

    一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...

  6. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  7. 封装集合(Encapsulate Collection)

    封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...

  8. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  9. CSharpGL(7)对VAO和VBO的封装

    CSharpGL(7)对VAO和VBO的封装 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入门参考 ...

随机推荐

  1. Excel基础—为什么学习Excel

    吾生也有涯,而知也无涯 点赞再看,养成习惯 自从个人计算机开始普及以后,Excel就得到了广泛的传播,工作学习生活中不处不存在Excel的影子,不论是考勤,工资还是其他的统计等等,都离不开Excel. ...

  2. Java中final修饰的方法是否可以被重写

    这是一次阿里面试里被问到的题目,在我的印象中,final修饰的方法是不能被子类重写的.如果在子类中重写final修饰的方法,在编译阶段就会提示Error.但是回答的时候还是有点心虚的,因为final变 ...

  3. 如何对List集合中的对象进行按某个属性排序

    我们在实际的开发工作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序 当list集合中的元素类型是我们自定义类型时,有两种对list中的元素进行排序的方法: 方法一 让l ...

  4. 文件流转blob并播放

    axios 这里是请求了个mp3做例子: this.$axios({ methods:"GET", url:"/api/music/soures/双笙.mp3" ...

  5. 在嵌入式设备中实现webrtc的第三种方式③

    本系列的最后一篇,讲解收发音视频数据. 贴出最终效果: 其实很简单,直接调用writeFrame即可,如下图: 当然,这是部分代码,完整代码在下面,展开可见: 1 #include "com ...

  6. leetcode两数之和go语言

    两数之和(Go语言) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复 ...

  7. IO流读写数据简单示例

    常用的字节输入流有:InputStream ,FileInputStream,BufferedInputStream 常用的字节输出流有:OutputStream,FileOutputStream,B ...

  8. 关闭防火墙和设置主机名和ip及克隆机网卡处理方法

    关闭防火墙: service NetworkManager stop --图形化用ifconfig之前先关掉网络服务. chkconfig NetworkManager off (将开机自启动关掉,使 ...

  9. Ceph部署mon出现0.0.0.0地址

    前言 最近在群里两次看到出现mon地址不对的问题,都是显示0.0.0.0:0地址,如下所示: [root@lab8106 ceph]# ceph -s cluster 3137d009-e41e-41 ...

  10. Python_用PyQt5 建 notepad 界面

    用PyQt5建notepad界面 1 # -*-coding:utf-8 -*- 2 """ 3 简介:用PyQt5做一个对话框,有菜单(2个.有独立图标.快捷键).提示 ...