详解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 相关文章推荐
用javascript实现的支持lrc歌词的播放器
May 17 Javascript
Firefox div高度自适应
Apr 28 Javascript
JQuery 选择器 xpath 语法应用
May 13 Javascript
加速IE的Javascript document输出的方法
Dec 02 Javascript
jquery制作 随机弹跳的小球特效
Feb 01 Javascript
轻松实现js图片预览功能
Jan 18 Javascript
jquery对象和DOM对象的任意相互转换
Feb 21 Javascript
jquery表单插件Autotab使用方法详解
Jun 24 Javascript
浅析vue数据绑定
Jan 17 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
Sep 22 Javascript
Vue引入Stylus知识点总结
Jan 16 Javascript
Element中Slider滑块的具体使用
Jul 29 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的autoload自动加载机制使用说明
2010/12/28 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
vue组件生命周期详解
2017/11/07 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Python随机函数random()使用方法小结
2018/04/29 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
在python中修改.properties文件的操作
2020/04/08 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
纯CSS3实现自定义Tooltip边框涂鸦风格的教程
2014/11/05 HTML / CSS
《记金华的双龙洞》教学反思
2014/04/19 职场文书
项目合作意向书模板
2014/07/29 职场文书
驻村工作先进事迹
2014/08/14 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
股份转让协议书范本
2015/01/27 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
java解析XML详解
2021/07/09 Java/Android
4种方法python批量修改替换列表中元素
2022/04/07 Python
Spring Boot实现文件上传下载
2022/08/14 Java/Android