详解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 相关文章推荐
20个非常棒的 jQuery 幻灯片插件和教程分享
Aug 23 Javascript
JS简单的图片放大缩小的两种方法
Nov 11 Javascript
jquery获取radio值实例
Oct 16 Javascript
js获取checkbox值的方法
Jan 28 Javascript
js数组依据下标删除元素
Apr 14 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
Mar 22 Javascript
jquery实现图片切换代码
Oct 13 Javascript
深入理解Javascript中的valueOf与toString
Jan 04 Javascript
jQuery窗口拖动功能的实现代码
Feb 04 Javascript
详解vue.js移动端导航navigationbar的封装
Jul 05 Javascript
js封装成插件的步骤方法
Sep 11 Javascript
微信小程序授权登录及解密unionId出错的方法
Sep 26 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
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
实用函数9
2007/11/08 PHP
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
简单讲解jQuery中的子元素过滤选择器
2016/04/18 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
Python文件去除注释的方法
2015/05/25 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
Python Collatz序列实现过程解析
2019/10/12 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
UNIX文件类型
2013/08/29 面试题
工程业务员岗位职责
2013/12/31 职场文书
五年级数学教学反思
2014/02/11 职场文书
委托书如何写
2014/08/30 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
如何在Python项目中引入日志
2021/05/31 Python
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫