详解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加解密 脚本解密
Feb 22 Javascript
JS链式调用的实现方法
Mar 07 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
Sep 16 Javascript
JS中的Replace方法使用经验分享
May 20 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
Nov 21 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
Feb 29 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
Sep 08 Javascript
canvas红包照片实例分享
Feb 28 Javascript
AngularJS基于factory创建自定义服务的方法详解
May 25 Javascript
JS数组操作之增删改查的简单实现
Aug 21 Javascript
layui表格 返回的数据状态异常的解决方法
Sep 10 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
Nov 05 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脚本数据库功能详解(中)
2006/10/09 PHP
使用php计算排列组合的方法
2013/11/13 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
简单分析python的类变量、实例变量
2019/08/23 Python
详解Django CAS 解决方案
2019/10/30 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
python requests.get带header
2020/05/05 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
小学庆六一活动总结
2014/08/28 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
学习心理学的体会
2014/11/07 职场文书
高三教师工作总结2015
2015/07/21 职场文书
《比的意义》教学反思
2016/02/18 职场文书
spring boot中nativeQuery的用法
2021/07/26 Java/Android
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫
Java对文件的读写操作方法
2022/04/29 Java/Android