详解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 版本的文本输入框检查器Input Check
Jul 09 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
Apr 25 Javascript
jQuery设置与获取HTML,文本和值的简单实例
Feb 26 Javascript
浅析js预加载/延迟加载
Sep 25 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
Jun 01 Javascript
js中class的点击事件没有效果的解决方法
Oct 13 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
webpack入门必知必会
Jan 16 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
Feb 10 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
Jun 19 Javascript
JS运动特效之链式运动分析
Jan 24 Javascript
vscode配置vue下的es6规范自动格式化详解
Mar 20 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
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
js性能优化技巧
2015/11/29 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
React简单介绍
2017/05/24 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
python类中super() 的使用解析
2019/12/19 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
高三历史教学反思
2014/01/09 职场文书
会计员岗位职责
2014/03/15 职场文书
个人自我鉴定总结
2014/03/25 职场文书
法律系毕业生求职信
2014/05/28 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
MySQL索引失效的典型案例
2021/06/05 MySQL