封装 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 相关文章推荐
IE6下CSS图片缓存问题解决方法
Dec 09 Javascript
js获取html文件的思路及示例
Sep 17 Javascript
jQuery控制TR显示隐藏的三种常用方法
Aug 21 Javascript
使用递归遍历对象获得value值的实现方法
Jun 14 Javascript
Bootstrap Table使用方法详解
Aug 01 Javascript
探讨跨域请求资源的几种方式(总结)
Dec 02 Javascript
js断点调试经验分享
Dec 08 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 Javascript
如何使用less实现随机下雪动画详解
Jan 02 Javascript
JS实现压缩上传图片base64长度功能
Dec 03 Javascript
JavaScript 禁止用户保存图片的实现代码
Apr 28 Javascript
在Uni中使用Vue的EventBus总线机制操作
Jul 31 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
PHP 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
python文件操作整理汇总
2014/10/21 Python
python查找目录下指定扩展名的文件实例
2015/04/01 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python编程之Re模块下的函数介绍
2017/10/28 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
HTML5新标签兼容——&gt; 的两种方法
2018/09/12 HTML / CSS
小学中秋节活动方案
2014/02/06 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
幼儿园老师寄语
2014/04/03 职场文书
行政经理岗位职责
2015/04/15 职场文书
创业计划书之宠物店
2019/09/19 职场文书
Python实现天气查询软件
2021/06/07 Python
JavaScript实现登录窗体
2021/06/22 Javascript
Docker下安装Oracle19c
2022/04/13 Servers