封装的意义

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

封装

  1. import axios from 'axios'
  2. axios.defaults.baseURL = 'http://127.0.0.1:8000'
  3.  
  4. // 全局设置网络超时
  5. axios.defaults.timeout = 10000;
  6.  
  7. //设置请求头信息
  8. axios.defaults.headers.post['Content-Type'] = 'application/json';
  9. axios.defaults.headers.put['Content-Type'] = 'application/json';
  10.  
  11. axios.interceptors.request.use(
  12. config => {
  13. // 每次发送请求之前判断是否存在token,如果存在,统一在http请求的header都加上token,不用每次请求都手动添加
  14. const token = localStorage.getItem('token')
  15. // console.log(token)
  16. if(token){
  17. config.headers.Authorization = 'JWT' + token
  18. }
  19. return config;
  20. },
  21. error => {
  22. return Promise.error(error);
  23. })
  24.  
  25. axios.interceptors.response.use(
  26. //请求成功
  27. // res => res.status === 200 ? Promise.resolve(res) :
  28. Promise.reject(res),
  29. res => {
  30. if(res){
  31. //加上201是因为modelviewset的post请求成功的状态码是201
  32. if(res.status === 200 || res.status === 201){
  33. return Promise.resolve(res)
  34. }
  35. }
  36. },
  37. //请求失败
  38. error => {
  39. if(error.response){
  40. // 判断⼀下返回结果的status == 401? ==401跳转登录⻚⾯。 !=401passs
  41. // console.log(error.response)
  42. if (error.response.status === 401){
  43. // 跳转不可以使⽤this.$router.push⽅法、
  44. // this.$router.push({path:'/login'})
  45. window.location.href = 'http://127.0.0.1:8888/'
  46. }else{
  47. // errorHandle(response.status, response.data.message);
  48. return Promise.reject(error.response);
  49. }
  50. // 请求已发出但是不在2xx的范围
  51. }else {
  52. // 处理断⽹的情况
  53. // eg:请求超时或断⽹时,更新state的network状态
  54. // network状态在app.vue中控制着⼀个全局的断⽹提示组件的显示隐藏
  55. // 关于断⽹组件中的刷新重新获取数据,会在断⽹组件中说明
  56. // store.commit('changeNetwork', false);
  57. return Promise.reject(error.response);
  58. }
  59. }
  60. )
  61.  
  62. //封装axios
  63. //封装get请求
  64. export function axios_get(url,params){
  65. return new Promise(
  66. (resolve,reject)=>{
  67. axios.get(url,{params:params}).then(res=>{
  68. // console.log("封装信息的的res", res)
  69. resolve(res.data)
  70. }).catch(err=>{
  71. reject(err.data)
  72. })
  73. }
  74. )
  75. }
  76.  
  77. //封装post请求
  78. export function axios_post(url,data){
  79. return new Promise(
  80. (resolve,reject)=>{
  81. // console.log(data)
  82. axios.post(url,JSON.stringify(data)).then(res=>{
  83. // console.log("封装信息的的res", res)
  84. resolve(res.data)
  85. }).catch(err=>{
  86. reject(err.data)
  87. })
  88. }
  89. )
  90. }
  91.  
  92. //封装put请求
  93. export function axios_put(url,data){
  94. return new Promise(
  95. (resolve,reject)=>{
  96. // console.log(data)
  97. axios.put(url,JSON.stringify(data)).then(res=>{
  98. // console.log("封装信息的的res", res)
  99. resolve(res.data)
  100. }).catch(err=>{
  101. reject(err.data)
  102. })
  103. }
  104. )
  105. }
  106.  
  107. //封装delete请求
  108. export function axios_delete(url,data){
  109. return new Promise(
  110. (resolve,reject)=>{
  111. // console.log(data)
  112. axios.delete(url,{params:data}).then(res=>{
  113. // console.log("封装信息的的res", res)
  114. resolve(res.data)
  115. }).catch(err=>{
  116. reject(err.data)
  117. })
  118. }
  119. )
  120. }
  121. //⼀定要导出函数
  122. export default axios;

  

使用

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

  

  1. <script>
  2. // 导入axios函数
  3. import {user_add} from '../api/api'
  4. export default {
  5. data(){
  6. return{
  7. username:'',
  8. age:'',
  9. home:'',
  10. hight:'',
  11. roles:'',
  12. classrooms:'',
  13. }
  14. },
  15. methods:{
  16. add(username){
  17. let data={
  18. "username":this.username,
  19. "age":this.age,
  20. "home":this.home,
  21. "hight":this.hight,
  22. "roles":[this.roles],
  23. "classrooms":this.classrooms
  24. }
  25. //直接使用导入的axios函数
  26. user_add(data).then(res=>{
  27. console.log(res)
  28. if(res.code==200){
  29. alert('添加成功')
  30. sessionStorage.setItem("username",username)
  31. this.$router.push({path:'/userdel'})
  32. }else {
  33. alert('添加失败')
  34. }
  35. }).catch(error=>{
  36. console.log(error)
  37. })
  38. }
  39. },
  40. }
  41. </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. APIO2008免费道路

    题目大意 给定一张n个点m条边的图,图上有两种边,求保证有k条第一种边的情况下的最小生成树 传送门 题解 考虑最小生成树kruskal算法 先找到不含限制的最小生成树,然后就可以知道哪些第一种边是必选 ...

  2. Lucas(卢卡斯)定理模板&&例题解析([SHOI2015]超能粒子炮·改)

    Lucas定理 先上结论: 当p为素数: \(\binom{ N }{M} \equiv \binom{ N/p }{M/p}*\binom{ N mod p }{M mod p} (mod p)\) ...

  3. AWS SDK 使用说明

    AWS 的Python SDK包名为 boto3, 可以使用命令pip install boto3安装使用 BOTO3中的基本概念 boto3提供了两个级别的接口来访问AWS服务:High Level ...

  4. expect ':' at 0, actual = (JSON转化异常解决)

    这个报错我的问题主要是前端得到的JSON格式不是标准的JSON串,所以会报这个错, 解决办法 需要使用JSON.toJSONString()转换为标准的字符串

  5. php之cms后台文章管理及显示

    public function index(){ C('TOKEN_ON',false);//关闭表单令牌 读取配置 //查询指定id的栏目信息 $id=I('get.id');//类别ID $top ...

  6. linux之NTP服务

    1. NTP服务(网络时间协议) Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒) ...

  7. 科普干货|漫谈鸿蒙LiteOS-M与HUAWEI LiteOS内核的几大不同

    摘要:鸿蒙和LiteOS的内核都是一样的名字,可它们究竟有什么不同呢?一起来对比一下文件吧! HarmonyOS系统 HarmonyOS是一款"面向未来".面向全场景(移动办公.运 ...

  8. parted会启动你的ceph osd,意外不?

    前言 如果看到标题,你是不是第一眼觉得写错了,这个怎么可能,完全就是两个不相关的东西,最开始我也是这么想的,直到我发现真的是这样的时候,也是很意外,还是弄清楚下比较好,不然在某个操作下,也许就会出现意 ...

  9. 单独编译一个ext4内核模块

    当我们需要使用一个内核模块的时候,在当前使用版本内核编译的时候又没有加进去,在不改变内核版本的时候,再编译整个内核,可能会覆盖原来的内核,导致系统无法启动 现在我们能够单独选择需要的模块,然后加载进内 ...

  10. Jmeter 处理接口乱码

    第一步:添加 BeanShell Listener 第二步: 设置值 : prev.setDataEncoding("UTF-8") 第三步: 重新跑脚本,看接口返回值