封装的意义

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. 利用CNN进行中文文本分类(数据集是复旦中文语料)

    利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) 利用RNN进行中文文本分类(数据集是复旦中文语料) 上一节我们利用了RNN(GRU)对中文文本进行了分类,本节我们将继续使用 ...

  2. 《Clojure编程》笔记 第4章 多线程和并发

    目录 背景简述 第4章 多线程和并发 4.0 我的问题 4.1 术语 4.1.1 一个必须要先确定的思考基础 4.2 计算在时间和空间内的转换 4.2.1 delay 4.2.2 future 4.2 ...

  3. ts流中的pcr与pts计算与逆运算

    mpeg2ts文件格式中有pcr和pts的概念,其代码含义如下: PCR(Program Clock Reference)--指示系统时钟本身的瞬时值的时间标签称为节目参考时钟标签(PCR). PTS ...

  4. ElementUI表格行编辑单元格编辑支持(输入框,选择框)Demo

    嗯,需要做成这个样子,所以网上查了些资料.整理了下.提供几个一个思路.不足之处请小伙伴指出来.  普通版的table可编辑内嵌select选择框,输出框,编辑删除添加等 <!DOCTYPE ht ...

  5. let声明的全局变量不是window对象属性

    今天在控制台写删除数组第一个元素的代码时,发现了一个问题,以下是书中源码, let arr = [1,2,3,4,5] Array.prototype.reIndex = function (myAr ...

  6. svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方案

    今天SVN提交代码遇到"Previous operation has not finished; run 'cleanup' if it was interrupted"报错,&q ...

  7. js数组方法(管饱)

    有一些数组方法是ECMAScript新增的,一定要注意浏览器的兼容!! Array对象属性: 属性 说明 constructor 返回对创建此对象的函数引用 length 返回集合内的元素的所有长度 ...

  8. windows端口占用和进程定位

    问题:Error was Port already in use: 40001 1. netstat -ano|findstr "40001" TCP 127.0.0.1:1404 ...

  9. 手写@koa/router源码

    上一篇文章我们讲了Koa的基本架构,可以看到Koa的基本架构只有中间件内核,并没有其他功能,路由功能也没有.要实现路由功能我们必须引入第三方中间件,本文要讲的路由中间件是@koa/router,这个中 ...

  10. 【django】长轮询

    API.PY import queue from django.contrib.auth.hashers import check_password from rest_framework.views ...