详解Vue2 SSR 缓存 Api 数据


Posted in Javascript onNovember 20, 2017

本文介绍了Vue2 SSR 缓存 Api 数据,分享给大家,具体如下:

1. 安装缓存依赖: lru-cache

npm install lru-cache --dev

2. api 配置文件

config-server.js

var LRU = require('lru-cache')

let api
if (process.__API__) {
  api = process.__API__
} else {
  api = process.__API__ = {
    api: 'http://localhost:8080/api/',
    cached: LRU({
      max: 1000,
      maxAge: 1000 * 60 * 15
    }),
    cachedItem: {}
  }
}

module.exports = api

配置下lru-cache

3. 封装下 api

import axios from 'axios'
import qs from 'qs'
import md5 from 'md5'
import config from './config-server.js'

export default {
  post(url, data) {
    const key = md5(url + JSON.stringify(data))
    if (config.cached && config.cached.has(key)) {
      return Promise.resolve(config.cached.get(key))
    }
    return axios({
      method: 'post',
      url: config.api + url,
      data: qs.stringify(data),
      // 其他配置
    }).then(res => {
      if (config.cached && data.cache) config.cached.set(key, res)
      return res
    })
  }
}

ajax 库我们用axios, 因为axios在 nodejs 和 浏览器都可以使用

并且将 node 端和浏览器端分开封装

import config from './config-server.js'
const key = md5(url + JSON.stringify(data))

通过 url 和参数, 生成一个唯一的 key

if (config.cached && config.cached.has(key)) {
  return Promise.resolve(config.cached.get(key))
}
if (config.cached && data.cache) config.cached.set(key, res)

判断下是不是开启了缓存, 并且接口指定缓存的话, 将 api 返回的数据, 写入缓存

注意:

这个 api 会处理所有的请求, 但是很多请求其实是不需要缓存的, 所以需要缓存可以在传过来的 data 里, 添加个 cache: true, 如:

api.post('/api/test', {a: 1, b:2, cache: true})

不需要缓存的直接按正常传值即可

当然这里标记是不是要缓存的方法有很多, 不一定要用这一种

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery EasyUI API 中文文档 可调整尺寸
Sep 29 Javascript
javascript中判断一个值是否在数组中并没有直接使用
Dec 17 Javascript
JavaScript获取指定元素位置的方法
Apr 08 Javascript
JavaScript实现的MD5算法完整实例
Feb 02 Javascript
JQuery点击事件回到页面顶部效果的实现代码
May 24 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
Jul 07 Javascript
浅谈JS的基础类型与引用类型
Sep 13 Javascript
bootstrap datetimepicker2.3.11时间插件使用
Nov 19 Javascript
js 判断数据类型的几种方法
Jan 13 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
Apr 08 Javascript
JS原型prototype和__proto__用法实例分析
Mar 14 Javascript
VueCli生产环境打包部署跨域失败的解决
Nov 13 Javascript
Three.js开发实现3D地图的实践过程总结
Nov 20 #Javascript
jquery ztree实现右键收藏功能
Nov 20 #jQuery
深入理解vuex2.0 之 modules
Nov 20 #Javascript
three.js中文文档学习之如何本地运行详解
Nov 20 #Javascript
AngularJS实现自定义指令及指令配置项的方法
Nov 20 #Javascript
详解webpack + react + react-router 如何实现懒加载
Nov 20 #Javascript
详细分析jsonp的原理和实现方式
Nov 20 #Javascript
You might like
详解PHP中foreach的用法和实例
2016/10/25 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
Python中的闭包实例详解
2014/08/29 Python
python使用cPickle模块序列化实例
2014/09/25 Python
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
Python日期的加减等操作的示例
2017/08/15 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
小学生评语集锦
2014/04/18 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
2014年行政部工作总结
2014/11/19 职场文书
小组口号霸气押韵
2015/12/24 职场文书
个人道歉信大全
2019/04/11 职场文书
调研报告的主要写法
2019/04/18 职场文书
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
Redis 哨兵集群的实现
2021/06/18 Redis
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技