详解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 相关文章推荐
js+xml生成级联下拉框代码
Jul 24 Javascript
DWR实现模拟Google搜索效果实现原理及代码
Jan 30 Javascript
node.js中的events.emitter.removeListener方法使用说明
Dec 10 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 Javascript
jQuery插件实现多级联动菜单效果
Dec 01 Javascript
详解javascript立即执行函数表达式IIFE
Feb 13 Javascript
如何用webpack4带你实现一个vue的打包的项目
Jun 20 Javascript
jQuery实现ajax回调函数带入参数的方法示例
Jun 26 jQuery
使用vue中的混入mixin优化表单验证插件问题
Jul 02 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
Mar 09 Javascript
Vue使用Proxy代理后仍无法生效的解决
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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
简单的用PHP编写的导航条程序
2006/10/09 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
PHP中Header使用的HTTP协议及常用方法小结
2014/11/04 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
JavaScript类库D
2010/10/24 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
javascript history对象详解
2017/02/09 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
Python中的tuple元组详细介绍
2015/02/02 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
群众路线教育实践活动的心得体会
2014/09/03 职场文书
求职简历自我评价2015
2015/03/10 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书