详解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 相关文章推荐
Google排名中的10个最著名的 JavaScript库
Apr 27 Javascript
使用javascript为网页增加夜间模式
Jan 26 Javascript
JS判断文本框内容改变事件的简单实例
Mar 07 Javascript
jQuery .tmpl() 用法示例介绍
Aug 21 Javascript
javascript实现图片自动和可控的轮播切换特效
Apr 13 Javascript
JS实现动态移动层及拖动浮层关闭的方法
Apr 30 Javascript
SVG描边动画
Feb 23 Javascript
如何使用Bootstrap创建表单
Mar 29 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
Jul 25 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
Sep 01 Javascript
使用FormData实现上传多个文件
Dec 04 Javascript
微信小程序获取用户openid的实现
Dec 24 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使之能同时支持GIF和JPEG
2006/10/09 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
PHP学习笔记之session
2018/05/06 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
jquery ajax abort()的使用方法
2010/10/28 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
Python操作Word批量生成文章的方法
2015/07/28 Python
解读Python编程中的命名空间与作用域
2015/10/16 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
Python 中pandas.read_excel详细介绍
2017/06/23 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
Python中format()格式输出全解
2019/04/12 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
应用电子技术专业个人求职信
2013/09/21 职场文书
运动会解说词200字
2014/02/06 职场文书
网络研修随笔感言
2014/02/17 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
JavaScript实现栈结构详细过程
2021/12/06 Javascript