封装的意义

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. modbus协议开关量采集模块

    modbus协议开关量采集模块是指的使用Modbus协议的进行信号的采集与控制的一种设备. Modbus 协议设备都具有唯一的 Modbus 地址,众山 DTU 默认 Modbus 地址为 100,用 ...

  2. Java学习的第三天

    1.今天学了main函数具体的解读如 main函数关键字的意义 变量命名 2.在2.1当中的cmd命令实施失败,文件路径没有找到. 3.明天学习变量范围和注释阅读大道至简.

  3. Linux 系统编程 学习:09-线程:线程的创建、回收与取消

    Linux 系统编程 学习:09-线程:线程的创建.回收与取消 背景 我们在此之前完成了 有关进程的学习.从这一讲开始我们学习线程. 完全的开发可以参考:<多线程编程指南> 在Linux ...

  4. ubuntu裸机启动python博客项目

    关注公众号"轻松学编程"了解更多. 在linux的ubuntu(18.04)中正确安装python的命令: sudo apt clean sudo apt update sudo ...

  5. 令人惊叹的百度Echarts,大数据分析的必备工具

    学习目录 1.可视化面板介绍     1.1技术要点     1.2案例适配方案     1.3页面主体布局2.Echarts(重点)     2.1echarts介绍     2.2echarts体 ...

  6. 浅谈Linux桌面(发行版及桌面环境)

    Part I: 前言 笔者2018年接触Linux(当时还是学校机房的Ubuntu 14.04 LTS),至今已经有4个年头了. 折腾了至少十几个Linux发行版,包括但不限于: ubuntu.Deb ...

  7. CF1320C World of Darkraft: Battle for Azathoth

    线段树 又是熟悉的感觉,又是E题写完了,没调完,不过还好上了紫 CF1295E 可以发现可以打败怪兽的关系类似二维偏序 那么首先考虑第一维(武器)以攻击值($a_{i}$)进行排序 把所有的怪兽以防御 ...

  8. C++实现管理系统

    概述 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名.性别.年龄.联系电话.家庭住址)最多记录1000人 显示联系人:显示通讯录中所有的联系人信息 删除联系人:按照姓名进行 ...

  9. ubutun 服务器配置jupyter notebook

    由于能力有限,学习机器学习时候发现,自己的电脑带不起来,所以想起了服务器,选择的是阿里的ubutun服务器,所以希望能够 使用jupyter notebook,看到网上一大片,配置和好久,才成功,在这 ...

  10. 全文思维导图------redis设计与实现