vue axios 缓存 接口请求实现缓存加载

        文章写的多了,开头就不知道怎么写了,硬挤一些句子总觉的卖弄。其实更多的想留下各位看官,多多的点赞,多多的关注,多的收藏。为将来的博客化动作做好前期数据粉丝基础。哦哦哦,我在想啥呢。。这大下午的。。。。嘿嘿。。。。。。。

        言归正传,不阿传。

        开发过程中总有一些数据存放在服务器,但是这些数据基本上一旦生成不会再变,比如省市区三级联动数据、一些静态数据字典等。每次进入页面每次都通过接口加载,总不是最好的方案。今天闲来针对 axios请求库里面增加缓存功能,纯手撸逻辑,抛砖引玉提供一个思路。以下为源代码:

注意此缓存为内存缓存模型,未写入localstorage,你自己可以实现localstorage缓存读取。

        


/**缓存池,此缓存为内存缓存模块,未写入localstorage,你自己可以实现localstorage缓存读取*/
const cache = {};const sortParams = (params)=>{params = params?params:{}let sort = Object.keys(params).sort();return sort.reduce((sorted,key)=>{sorted[key] = params[key]return sorted;},{})
}const serializedParams = (params) => {let p = Object.entries(params).map(([key,value]) => `$[key=${encodeURIComponent(value)}`).join('&')return p
}const generateCacheKey = (config)=>{const {url,params} = config;const sp = sortParams(params)const sep = serializedParams(sp);return `${url}${sep}`
}const cacheAdapter = (config) =>{const cacheKey = generateCacheKey(config);const response = cache[cacheKey];if (config.cache && response){return Promise.resolve(response);}return axios.defaults.adapter(config);
}const saveCache = (config,data) =>{const cacheKey = generateCacheKey(config);const rp = JSON.parse(JSON.stringify(data));cache[cacheKey] = rp
}// 创建axios实例
const service = axios.create({baseURL:process.env.NODE_ENV === "production"? process.env.VUE_APP_BASE_API: "/", // api 的 base_urltimeout: Config.timeout, // 请求超时时间adapter:cacheAdapter
});// request拦截器
service.interceptors.request.use((config) => {if (getToken()) {config.headers["Authorization"] = getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改}config.headers["Content-Type"] = "application/json";return config;},(error) => {Promise.reject(error);}
);// response 拦截器
service.interceptors.response.use((response) => {if (response.config.cache){saveCache(response.config,response)}return response.data;},(error) => {// 兼容blob下载出错json提示return Promise.reject(error);}
);
export default service;

 在调用接口的地方稍微改造一下:增加一个属性:cache:true时则会读取缓存进行接口响应。不使用缓存时,这个值给false或者是不给这个属性即可。

A、使用缓存:

B、不使用缓存:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Three.js简介

Three.js前提须知 讲到 Three.js,就需要先说一下 OpenGL 和 WebGL。 OpenGL 是一个跨平台的3D/2D的绘图标准(规范),WebGL(Web Graphics Library)是一种3D绘图协议。 WebGL允许把JavaScript和OpenGL 结合…

图像处理学习笔记(一)

本文主要介绍,以供读者能够理解该技术的定义、原理、应用。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:ISP处理 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就…

xAI开发的一款巨大型语言模型(HLM)--Grok 1

在xAI发布Grok的权重和架构之后,很明显大型语言模型(LLM)的时代已经过去,现在是巨大型语言模型(HLM)的时代。这个混合专家模型发布了3140亿个参数,并且在Apache 2.0许可下发布。这个模型没有针对…

【项目管理后台】Vue3+Ts+Sass实战框架搭建一

项目管理后台 建立项目最好是卸载Vetur 新建.env.d.ts文件安装Eslint安装校验忽略文件添加运行脚本 安装prettier新建.prettierrc.json添加规则新建.prettierignore忽略文件 安装配置stylelint新建.stylelintrc.cjs 添加后的运行脚本配置husky配置commitlint配置husky 强制使用…

安卓面试题多线程 76-80

76. 简述普通线程与守护线程的区别 ?java 中的线程分为两种:守护线程(Daemon)和用户线程(User) 任何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(boolon);true 则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在 Thread.start…

从服务器到云原生:企业IT基础设施的演进之路

随着数字经济的迅猛发展,企业IT数字化转型已成为推动业务创新和提升竞争力的关键。在这一转型过程中,基础设施的建设与升级显得尤为重要。企业需要不断优化和更新他们的基础设施,以适应不断变化的市场需求和技术发展。本文将探讨企业IT数字化…

信息系统项目管理师020:信息安全(2信息技术发展—2.1信息技术及其发展—2.1.4信息安全)

文章目录 2.1.4 信息安全1.信息安全基础2.加密解密3.安全行为分析技术4.网络安全态势感知 2.1.4 信息安全 常见的信息安全问题主要表现为:计算机病毒泛滥、恶意软件的入侵、黑客攻击、利用计算机犯罪、网络有害信息泛滥、个人隐私泄露等。随着物联网、云计算、人工智…

【JVM】如何判断堆上的对象没有被引用?

如何判断堆上的对象没有被引用? 常见的有两种判断方法:引用计数法和可达性分析法。 引用计数法会为每个对象维护一个引用计数器,当对象被引用时加1,取消引用时减1。 引用计数法的缺点-循环引用 引用计数法的优点是实现简单&…

大数据面试题 —— HBase

目录 什么是HBase简述HBase 的数据模型HBase 的读写流程HBase 在写的过程中的region的split的时机HBase 和 HDFS 各自的使用场景HBase 的存储结构HBase 中的热现象(数据倾斜)是怎么产生的,以及解决办法有哪些HBase rowkey的设计原则HBase 的列…

RAFT: Adapting Language Model to Domain Specific RAG

RAFT: Adapting Language Model to Domain Specific RAG 相关链接:arXiv GitHub 关键字:Retrieval-Augmented Fine Tuning (RAFT)、Large Language Models (LLMs)、Domain Specific RAG、Distractor Documents、Chain-of-Thought 摘要 预训练大型语言模…

云原生:重塑未来应用的基石

随着数字化时代的不断深入,云原生已经成为了IT领域的热门话题。它代表着一种全新的软件开发和部署范式,旨在充分利用云计算的优势,并为企业带来更大的灵活性、可靠性和效率。今天我们就来聊一聊这个热门的话题:云原生~ &#x1f4…

Android Studio实现内容丰富的安卓自行车租赁平台

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号105 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看公告 3.查看自行车分类 4.预订自行车, 5.…

vue3之声明式和编程式导航

在组件内部,可以使用 r o u t e r 属性访问路由,例如 t h i s . router 属性访问路由,例如 this. router属性访问路由,例如this.router.push(…)。如果使用组合式 API,你可以通过调用 useRouter() 来访问路由器&#…

jdk8的stream新特性写法

1、集合A判断是否包含集合B里面的元素&#xff0c;并且把包含元素放到一个新集合里面 List<TagBean> tagBean tagBeans.stream().filter(adminMo.getTagList()::contains).collect(toList());2、把subListByChildId里面的subId作为key,本身对象ChannelSubMo作为value …

【高效开发工具系列】语雀Excel入门

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

富格林:亏损总结正规经验预防

富格林悉知&#xff0c;在现货黄金投资中亏损是投资者最不愿意看到的&#xff0c;想要避免亏损&#xff0c;在进入市场之前应该做好基础知识的学习&#xff0c;对亏损案例进行分析深剖其中的规律和特征&#xff0c;从而运用正规的学习方法经验规避风险。以下总结几点正规的做单…

前端项目,个人笔记(三)【Vue-cli - api封装-axios使用举例】

目录 前言 1、axios配置与测试 1.1、配置 1.2、测试 2、使用axios案例-渲染header 3、Pinia优化重复请求 3.1、为什么&#xff1f; 3.2、使用Pinia优化代码步骤 步骤一&#xff1a;在main.js中创建 Pinia 实例&#xff0c;并将其作为插件添加到 Vue 应用中 步骤二&am…

3703. 括号的匹配 北京师范大学考研上机真题 栈的思想

在算术表达式中&#xff0c;除了加、减、乘、除等运算外&#xff0c;往往还有括号。 包括有大括号 {}&#xff0c;中括号 []&#xff0c;小括号 ()&#xff0c;尖括号 <> 等。 对于每一对括号&#xff0c;必须先左边括号&#xff0c;然后右边括号&#xff1b;如果有多个…

2024年数据隐私将成为定义科技问题的关键问题。

数据隐私&#xff1a;2024年科技领域的核心议题 引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;如ChatGPT等AI驱动的聊天机器人正在重塑我们熟知的行业。然而&#xff0c;每一次技术的进步&#xff0c;都伴随着传统角色的消逝。2023年6月&#xff0…

初识数据库|数据库的特点、分类以及作用

数据库系统&#xff08;DateBase System&#xff0c;简称DBS&#xff09;是指在计算机系统中引入数据库后的系统构成&#xff0c;由计算机硬件&#xff0c;操作系统&#xff0c;DBMS&#xff0c;DB&#xff0c;应用程序和用户以及数据库开发和管理人员等组成。 &#xff08;一…