首页 > sd.js 2.0封装:更加简化请求传参内容

sd.js 2.0封装:更加简化请求传参内容

sd.js 

import $global from "./global";
import $g from "./sg";
import $ from "jquery";
import {Message, Loading} from "element-ui";//引入饿了么相关组件
import {Base64} from "js-base64"; //cnpm i --save js-base64 & cnpm i --save
//import axios from 'axios';const isLocal = location.href.includes("localhost") || location.href.includes("127.0.0.1") || location.href.includes("192.168"); //是否本地运行
//常用路径----------------------------------------------------------------
// const API_ROOT_URL = "//xxx.xxx.com/api"; //发布到服务器用这个,远程测试服务器
const API_ROOT_URL = "/api"; //本地代理测试服务器if (isLocal) {var isLocalAPI = API_ROOT_URL.includes("localhost") || API_ROOT_URL.includes("127.0.0.1") || API_ROOT_URL.includes("192.168");Message.error(`测试环境:${isLocalAPI ? "本地" : "远程服务器"}API`);
}// 常量----------------------------------------
const website = {clientId: "xxx",clientSecret: "xxx"
};
//主体请求----------------------------------------------------------------
export default {//API URL❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤// 公共方法________________________________________________//API FUNCTION ❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤load: {},// 显示加载动画loading(text = "加载中…", name) {this.load && (this.load[name] = Loading.service({text}));},// 显示加载动画hideLoading(name) {this.load && this.load[name] && this.load[name].close();},// 错误提示errorTip(where, d, url) {Message.error("【可能是" +where + "报错】

" +"接口地址:" + url + "

" +"返回报文:" + JSON.stringify(d, null, 4));},// 跳转到登录页面jumpLoginPage(todo = false) {if (!location.hash.includes("/login")) {if (todo) {Message.success("已退出");} else {var token = $g.cookie.get("token"); //获取tokenMessage.error(token ? "登录状态已过期,请重新登录!" : "您还未登录,请登录后操作!");// alert(token ? "登录状态已过期,请重新登录!" : "您还未登录,请登录后操作!");}$g.cookie.clearAll();var storageKey = $global.config.storageKey;localStorage.removeItem(storageKey);var url = location.href.split("#")[0] + "#/login?url=" + encodeURIComponent(location.href);location.replace(url);}},// 获取当前用户名/* getUserName() {var up = localStorage.getItem($global.config.storageKey); //获取本地保存的用户名和密码if (up) {up = up.split($global.config.splitStr);return Base64.decode(up[0]);} else {this.jumpLoginPage();}}, *///API FUNCTION ❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤__sd(url, data, doing = {}, otherConfig = {}, type) {//别名转义 ----------------------------------------------------------------doing.s && (doing.success = doing.s); //精简别名doing.f && (doing.fail = doing.f); //精简别名doing.e && (doing.error = doing.e); //精简别名typeof doing.l === "string" ? this.loading(doing.l, url) : (doing.l && (doing.loading = doing.l)); //精简别名[加载]// ----------------------------------------------------------------var token = $g.cookie.get("token"); //获取token//noAutoToken=true代表该接口无需保持登录状态就可以获取信息,譬如一些公共对外开放的接口if (!otherConfig.noAutoToken) {data || (data = {});if (token) {data["Blade-Auth"] = "bearer   " + token;} else {doing.loading && doing.loading.close(); //关闭加载// 如果本地没有tokenif (location.href.includes("/login")) {} else {//判断如果不是在登录页,且本地没有token或者token里面没有用户名和密码,则直接跳转到登录页面return this.jumpLoginPage();}}}// ----------------------------------------------------------------var headers = {"Content-Type": data["Content-Type"] || "application/x-www-form-urlencoded","Authorization": `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`//所有页面都要Authorization};data["Blade-Auth"] && (headers["Blade-Auth"] = data["Blade-Auth"]);if (data) {var contentType = data["Content-Type"];delete data["Content-Type"];delete data["Authorization"];delete data["Blade-Auth"];if (location.href.includes("/login")) {$g.cookie.clearAll();}if (contentType === "application/json") {data = JSON.stringify(data);}}doing.loading && doing.loading.show && doing.loading.show(); //显示加载动画$.ajax({timeout: 10 * 60 * 1000, //设置默认超时时间10分钟type: type || "POST",url,data,headers,success: d => {doing.loading && doing.loading.close(); //关闭加载this.hideLoading(url); //关闭加载switch (d.code) {case 200: //登录成功 ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤d.data && d.data.accessToken && (token = d.data.accessToken); //更新token$g.cookie.setByMinute("token", token, 60); //存储到本地60分钟的保存时间doing.success && doing.success(otherConfig.isGetAllData ? d : (d.data || d));break;case 401: //token失效 ☠ ☠ ☠ ☠this.jumpLoginPage();doing.fail && doing.fail(d);break;case -1: //请求失败 ✖ ✖ ✖ ✖default: //请求失败 ✖ ✖ ✖ ✖doing.fail ? doing.fail(d) : Message.error(d.msg);console.log("【报错】" + JSON.stringify(d, null, 4));break;}},error: d => { //请求报错 ✖ ✖ ✖ ✖doing.loading && doing.loading.close(); //关闭加载this.hideLoading(url); //关闭加载doing.error ? doing.error(d) : this.errorTip("后端逻辑", d, url);console.log("【报错】" + JSON.stringify(d, null, 4));}});},//❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤//登录接口login(data, doing) {this.__sd(API_ROOT_URL + "/login/token", data, doing, {noAutoToken: true});},// 例子************************************************demo(data = {}, doing) {data["Content-Type"] = "application/json";this.__sd(API_ROOT_URL + "/api-data/query ", data, doing, {}, "post");}, // ----------------------------------------
};

使用demo 

//精简模式----------------------------------------
var d = { id: 1 };this.$d.API(d, {//l: { show: () => (this.loading = true), close: () => (this.loading = false), },s: (d) => {console.log("【成功】", d);} 
});//一般模式----------------------------------------
var d = { param: "参数值", pageNum: 0 };this.$d.API_NAME(d, {l: "加载中…",//l: { show: () => (this.loading = true), close: () => (this.loading = false),  },s: (d) => {console.log("【成功】", d);} //,f:d=> this.$message.error(d.msg),});

更多相关:

  • 学习计划 MyPlan11 主题:Python描述统计、简单统计图形 时间:8.5-8.11周内完成 参考资料:新书《谁说菜鸟不会数据分析python篇》 各位星友们,在这个星球里每个人都要逼迫自己学习未知的领域或知识点,每天进步一点点,积累的时间久了 ,菜鸟也能起飞。 完成情况: 在pandas中,使用describe函数进行描述统...

  • 利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信。 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。 TCPServer/UDPS...

  • 题目:序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树。 示例:  你可以将以下二叉树:     1    /   2   3      /     4   5 序列化为 "[1,2,3,null,null,4,5]" 解题: /*** Definition for a binary tree no...

  •     原生sd.js----------------------------------------------------------------  const API_ROOT_URL = "http://www.api.com";const $d= {_postList_url: API_ROOT_URL + "/api...

  • 讲到第三方登录分享,第一反应大概就是友盟、ShareSDK之类。集成微信、QQ、微博三个平台的话,友盟的SDK有62.9M,ShareSDK的包有74M。如果直接集成最原始的三个平台的SDK,大小总共为51M。(关于集成前期的配置,可参考原生接入微博、微信和QQ的登录及分享)WechatIMG286.jpeg我们一般会在各个平台的授权...

  • 一、写在前面     关于qq微信登录的原理之流我就不一一赘述了,对应的官网都有,在这里主要是展示我是怎么实现出来的,看了好几个博客,有的是直接复制官网的,有的不知道为什么实现不了。我只能保证我的这个是我实现后才贴出来的,本文有看不懂的地方请结合官网看。(话说我感觉我写博客废话好多) 二、准备工作     通过以下官网获得相应AppI...

  • 什么是SSH? SSH对应 struts spring hibernatestruts 采用MVC模式,主要是作用于用户交互spring 采用IOC和AOP~作用比较抽象,是用于项目的松耦合hibernate 是对象持久化框架,其实就是实体类和数据库表建立关系,操作类就会触发相应的sql语句,可以不用写任何sql语句,完成数据库编程(...

  •  环境准备 本文使用Maven构建,因此需要一点Maven知识。首先准备环境依赖:  Java代码                   junit          junit       ...

  • 我一直在用Ubuntu发型版本的Linux系统,很喜欢把它做得更加的方便易用,特别是Ubuntu的Server版本,因为没有Desktop的 GUI界面,也没有自动登录设置,无法通过简单的点击鼠标方式来设置自动登录,在查阅了一些资料后,发现使用重定向就可以简单的解决这个问题。     其实想要在Ubuntu Server上自动登录非常...