xios封装
封装的意义
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封装的更多相关文章
- [C#] 简单的 Helper 封装 -- RegularExpressionHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- iOS开发之App间账号共享与SDK封装
上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...
- Ajax实现原理,代码封装
都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
- 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~
一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
- 封装集合(Encapsulate Collection)
封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
- CSharpGL(7)对VAO和VBO的封装
CSharpGL(7)对VAO和VBO的封装 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入门参考 ...
随机推荐
- K8S的StorageClass实战(NFS)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 关于LoRa安全联盟的六大常见问题
LoRaWAN的安全机制在哪里指定? 所有安全机制都在LULA联盟规范中指定,可以由公众下载. LoRa联盟规范如何保证LoRaWAN网络的安全操作? LoRaWAN支持来源认证.完整的媒体访问控制( ...
- adb命令如何获取appPackage和appActivity的信息
如何获取appPackage和appActivity的信息,这里有一个极为实用的命令:adb shell dumpsys activity |find "mFocusedActivity&q ...
- 快进来!花几分钟看一下 ReentrantReadWriteLock 的原理!
前言 在看完 ReentrantLock 之后,在高并发场景下 ReentrantLock 已经足够使用,但是因为 ReentrantLock 是独占锁,同时只有一个线程可以获取该锁,而很多应用场景都 ...
- HashMap的put kv,是如何扩容的?
HashMap的put kv,是如何扩容的? 描述下HashMap put(k,v)的流程? 它的扩容流程是怎么样的? HashMap put(k,v)流程 通过hash(key方法)获取到key的h ...
- 7.1range函数和冒泡排序
range函数和冒泡排序 一.range函数 在Python开发应用中 range函数相当重要,也比较常用: 首先看range函数的原型: range(start, end, scan) 参数 ...
- 02模板渲染和参数(补充:URL传参到视图)
先抛出代码: @app.route('/') def index(): return render_template('index.html',username ="郑勇") 问题 ...
- ASCII、Unicode、UTF-8、UTF-8(without BOM)、UTF-16、UTF-32傻傻分不清
ASCII.Unicode.UTF-8.UTF-8(without BOM).UTF-16.UTF-32傻傻分不清 目录 ASCII.Unicode.UTF-8.UTF-8(without BOM). ...
- java多线程---张孝祥
1.java web 中,一次http请求是一个任务,因为服务器里面有线程池的,存在一个线程处理多个请求任务. 2.在java中,vector,hashtable,concurrentHashMap是 ...
- 【原创】Linux虚拟化KVM-Qemu分析(六)之中断虚拟化
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...