详解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代码放在head和body中的区别分析
Dec 01 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
JS多物体实现缓冲运动效果示例
Dec 20 Javascript
jQuery、zepto、js常用小技巧
Feb 12 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
js脚本编写简单刷票投票系统
Jun 27 Javascript
基于node.js之调试器详解
Aug 22 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
Oct 01 Javascript
three.js中文文档学习之如何本地运行详解
Nov 20 Javascript
详解Chart.js轻量级图表库的使用经验
May 22 Javascript
angular实现input输入监听的示例
Aug 31 Javascript
vue强制刷新组件的方法示例
Feb 28 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数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
PHP四大安全策略
2014/03/12 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
js资料toString 方法
2007/03/13 Javascript
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
dreamweaver 安装Jquery智能提示
2011/04/02 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
用实例说明python的*args和**kwargs用法
2013/11/01 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
python自动12306抢票软件实现代码
2018/02/24 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
使用Python机器学习降低静态日志噪声
2018/09/29 Python
浅析python的优势和不足之处
2018/11/20 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
统计员岗位职责
2013/11/14 职场文书
新闻专业本科生的自我评价分享
2013/11/20 职场文书
学生感冒英文请假条
2014/02/04 职场文书
期末复习计划
2015/01/19 职场文书
2015年话务员工作总结
2015/04/29 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python