封装 axios+promise通用请求函数操作


Posted in Javascript onAugust 11, 2020

我就废话不多说了,大家还是直接看代码吧~

import axios from "axios";
import baseUrl from "../../setBaseUrl";
axios.defaults.baseURL = baseUrl;
import { Loading, Message } from "element-ui";
const loadingOptions = {
 lock: true,
 text: "拼命加载中",
 spinner: "el-icon-loading",
 background: "rgba(0, 0, 0, 0.7)"
};
if (localStorage.token) {
 axios.defaults.headers.common["x-token"] = localStorage.token;
}
const Http = {
 get: function(url: string, data: any, isLoading: boolean) {
  if (localStorage.token) {
   axios.defaults.headers.common["x-token"] = localStorage.token;
  }
  let loading: any;
  if (isLoading) {
   loading = Loading.service(loadingOptions);
  }
  return new Promise<any>((resolve, reject) => {
   axios
    .get(url, { params: data })
    .then(function(res) {
     if (isLoading) {
      loading.close();
     }
     if (res.data.code === 200) {
      resolve(res.data.data);
     } else {
      // console.warn("Http error Info ===> ", res.data);
      reject(res.data.message);
     }
    })
    .catch(function(err) {
     if (isLoading) {
      loading.close();
     }
     // console.warn("Http error Info ===> ", err);
     Message({
      message: err.message,
      type: "error",
      duration: 2500,
      showClose: true
     });
    });
  }).catch(function(err) {
   Message({
    message: err,
    type: "error",
    duration: 2500,
    showClose: true
   });
  });
 },
 post: function(url: string, data: any, isLoading: boolean) {
  if (localStorage.token) {
   axios.defaults.headers.common["x-token"] = localStorage.token;
  }
  let loading: any;
  if (isLoading) {
   loading = Loading.service(loadingOptions);
  }
  return new Promise<any>((resolve, reject) => {
   axios
    .post(url, data)
    .then(function(res) {
     if (isLoading) {
      loading.close();
     }
     if (res.data.code === 200) {
      resolve(res.data.data);
     } else {
      reject(res.data.message);
     }
    })
    .catch(function(err) {
     if (isLoading) {
      loading.close();
     }
     // console.warn("Http error Info===>", err);
     Message({
      message: err.message,
      type: "error",
      duration: 2500,
      showClose: true
     });
    });
  }).catch(function(err) {
   Message({
    message: err,
    type: "error",
    duration: 2500,
    showClose: true
   });
  });
 },
 put: function(url: string, data: any, isLoading: boolean) {
  if (localStorage.token) {
   axios.defaults.headers.common["x-token"] = localStorage.token;
  }
  let loading: any;
  if (isLoading) {
   loading = Loading.service(loadingOptions);
  }
  return new Promise<any>((resolve, reject) => {
   axios
    .put(url, data)
    .then(function(res) {
     if (isLoading) {
      loading.close();
     }
     if (res.data.code === 200) {
      resolve(res.data.data);
     } else {
      reject(res.data.message);
     }
    })
    .catch(function(err) {
     if (isLoading) {
      loading.close();
     }
     // console.warn("Http error Info===>", err);
     Message({
      message: err.message,
      type: "error",
      duration: 2500,
      showClose: true
     });
    });
  }).catch(function(err) {
   Message({
    message: err,
    type: "error",
    duration: 2500,
    showClose: true
   });
  });
 },
 delete: function(url: string, data: any, isLoading: boolean) {
  if (localStorage.token) {
   axios.defaults.headers.common["x-token"] = localStorage.token;
  }
  let loading: any;
  if (isLoading) {
   loading = Loading.service(loadingOptions);
  }
  return new Promise<any>((resolve, reject) => {
   axios
    .delete(url, data)
    .then(function(res) {
     if (isLoading) {
      loading.close();
     }
     if (res.data.code === 200) {
      resolve(res.data.data);
     } else {
      reject(res.data.message);
     }
    })
    .catch(function(err) {
     if (isLoading) {
      loading.close();
     }
     // console.warn("Http error Info===>", err);
     Message({
      message: err.message,
      type: "error",
      duration: 2500,
      showClose: true
     });
    });
  }).catch(function(err) {
   Message({
    message: err,
    type: "error",
    duration: 2500,
    showClose: true
   });
  });
 }
};
export default Http;

补充知识:vuex刷新页面是store被更新,如何解决数据备份?

我用的方法很简单,在App.vue中的生命周期函数created中,监听页面刷新,在页面刷新的时候,将store的数据及时存储在sessionStorage中,然后刷新完毕后就可以将sessionStorage中的数据再取出来用

created () { //页面刷新store数据备份
  if (localStorage.cmstoken) {
   this.$router.replace("/data");
  }else {
   this.$router.replace("/");
  }
  if (sessionStorage.getItem("store") ) { //在页面加载时读取sessionStorage里的状态信息
    this.$store.replaceState(Object.assign({}, this.$store.state,JSON.parse(sessionStorage.getItem("store"))))
  }
  window.addEventListener("beforeunload",()=>{ //在页面刷新时将vuex里的信息保存到sessionStorage里
    sessionStorage.setItem("store",JSON.stringify(this.$store.state))
  })
 },

以上这篇封装 axios+promise通用请求函数操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
三级下拉菜单的js实现代码
May 23 Javascript
JavaScript之编码规范 推荐
May 23 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
Jan 10 Javascript
控制文字内容的显示与隐藏示例
Jun 11 Javascript
JavaScript分析、压缩工具JavaScript Analyser
Dec 31 Javascript
微信小程序入门教程
Nov 18 Javascript
jQuery Checkbox 全选 反选的简单实例
Nov 29 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
简易Vue评论框架的实现(父组件的实现)
Jan 08 Javascript
vue项目实现github在线预览功能
Jun 20 Javascript
微信小程序视图控件与bindtap之间的问题的解决
Apr 08 Javascript
jquery实现简单每周轮换的日历
Sep 10 jQuery
在vue中使用回调函数,this调用无效的解决
Aug 11 #Javascript
vue 调用 RESTful风格接口操作
Aug 11 #Javascript
vue之封装多个组件调用同一接口的案例
Aug 11 #Javascript
vue接口请求加密实例
Aug 11 #Javascript
vue组件暴露和.js文件暴露接口操作
Aug 11 #Javascript
vue npm install 安装某个指定的版本操作
Aug 11 #Javascript
小程序自动化测试的示例代码
Aug 11 #Javascript
You might like
获得Google PR值的PHP代码
2007/01/28 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
js验证表单第二部分
2006/11/25 Javascript
js word表格动态添加代码
2010/06/07 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
征兵宣传标语
2014/06/20 职场文书
个人年终总结范文
2015/03/09 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL