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 + "报错】\n\r" +"接口地址:" + url + "\n\r" +"返回报文:" + 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),});

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

  1. pdf.js 请求传参关键词并高亮显示

    pdf.js 请求传参关键词并高亮显示 1.去官网下载: http://mozilla.github.io/pdf.js/getting_started/#download 2.将下载的包copy到s ...

  2. scrapy框架的日志等级和请求传参

    Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息.- 日志信息的种类:ERROR : 一般错误WARNI ...

  3. scrapy实现post请求与请求传参

    不推荐使用scrapy框架发送post请求,配置复杂,如果在数据量大 的情况下,可以通过如下代码来实现: import scrapyclass FySpider(scrapy.Spider):name ...

  4. 18-爬虫之scrapy框架请求传参实现的深度爬取(全站爬取)05

    请求传参实现的深度爬取 深度爬取:爬取的数据没有在同一张页面中(首页数据+详情页数据) 在scrapy中如果没有请求传参我们是无法进行持久化存储数据的 实现方式: scrapy.Request(url ...

  5. 爬虫开发10.scrapy框架之日志等级和请求传参

    今日概要 日志等级 请求传参 今日详情 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志 ...

  6. axios 最全 请求拦截器 响应拦截器 配置公共请求头 超时时间 以及get delete post put 四种请求传参方式

    axios 拦截器 请求拦截器 请求拦截器的作用是在请求发送前进行一些操作 例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易 响应拦截器 响应拦截器的作用是在接收到响应后进行一些操 ...

  7. jmeter测试接口--form表单提交请求(解决请求传参为空的问题)

    jmeter测试接口--form表单提交请求(解决请求传参为空的问题) 参考文章: (1)jmeter测试接口--form表单提交请求(解决请求传参为空的问题) (2)https://www.cnbl ...

  8. java get请求传参_Java-ThreadLocal三种使用场景

    ThreadLocal对于每一位Java读者而言我想可能都不陌生,因为面试基本都会被问到. Java-ThreadLocal三种使用场景 关于ThreadLocal JDK1.2的版本中就提供java ...

  9. a标签用ajax请求传参,Django中如何实现传参的Ajax请求

    带参数的Ajax请求 通过Ajax实现下面的功能: 在实现这个功能之前需要掌握的点: 1.在学习jQuery时,我们知道: 获取input标签中输入的值:$("#num1").va ...

最新文章

  1. python列表元素修改_python – 如何修改列表中列表中的元素
  2. 自考计算机原理知识点,09年自考计算机网络实用技术知识点:ATM原理
  3. 数据中台交付专家告诉你,数据架构的分层怎样更加合理?
  4. OpenInfra 十一年:OpenStack 部署规模超 2500 万计算核心
  5. was6 linux 卸载,重新安装was61
  6. 线性方程组迭代解法——雅可比(Jacobi)迭代法,Gauss-Seidel迭代法和超松弛(SOR)迭代法
  7. 苹果设备解锁工具iToolab UnlockGo Mac
  8. FOTA升级差分包编译服务器搭建
  9. 计算器的改良(NOIP2000)
  10. DHCP+DHCP中继
  11. 计算机最新行情调研报告,2020年中国笔记本电脑市场调研报告
  12. 提取KML文件上 点 的经纬度
  13. Android FFmpeg视频转码并保存到本地
  14. redis 底层数据结构详解
  15. 关于uboot的简介——uboot对Flash与DDR的管理
  16. Java中的标识符、关键字、字面值、变量、八种基本数据类型与类型转换规则
  17. #博学谷it学习技术支持#黑马头条遇到问题及解决1
  18. 百度搜索引擎的工作原理 鏀惰棌鍒帮細 时间:2015-07-10 文章来源:马海祥博客 访问次数:4330 关于百度以及其它搜索引擎的工作原理,其实大家已经讨论过很多,但随着科技的进步、互联网
  19. 拉格朗日中值定理,柯西中值定理,积分中值定理,广义积分中值定理的证明.( 纯手写,细节)
  20. 区分云计算,边缘计算,雾计算

热门文章

  1. Android实战技巧之六:PreferenceActivity使用详解
  2. try-catch-finally对返回值的影响
  3. 内联式css样式,直接写在现有的HTML标签中
  4. 利用委托和泛型实现树的常用操作
  5. 转:在 .NET 中实现异步回调访问数据库
  6. vc++学习篇(三)——预处理命令之条件编译(#ifdef,#else,#endif,#if等)
  7. 线性回归算法原理简介
  8. html标记汇总,HTML标记语法汇总.doc
  9. java运行时_java编译时与运行时概念与实例详解
  10. 软件架构师证书有用吗_健康管理师证书在求职时有用吗?