封装 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 相关文章推荐
jquery的键盘事件修改代码
Feb 24 Javascript
jQuery调用WebService的实现代码
Jun 19 Javascript
js replace替换所有匹配的字符串
Feb 13 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
Jan 13 Javascript
非常漂亮的相册集 使用jquery制作相册集
Apr 28 Javascript
关于function类中定义变量this的简单说明
May 28 Javascript
canvas知识总结
Jan 25 Javascript
Vue自定义指令使用方法详解
Aug 21 Javascript
在vue项目中安装使用Mint-UI的方法
Dec 27 Javascript
24个ES6方法解决JS实际开发问题(小结)
May 31 Javascript
微信小程序实现首页弹出广告
Dec 03 Javascript
vscode中使用npm安装babel的方法
Aug 02 Javascript
在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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
PHP中对数据库操作的封装
2006/10/09 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
canvas绘制七巧板
2017/02/03 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
实例讲解React 组件
2020/07/07 Javascript
Python中使用dom模块生成XML文件示例
2015/04/05 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
python实现趣味图片字符化
2019/04/30 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
文化宣传方案
2014/03/13 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
先进事迹材料范文
2014/12/29 职场文书
党支部综合考察意见
2015/06/01 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
成人成长感言如何写?
2019/08/16 职场文书