详解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 相关文章推荐
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
Feb 09 Javascript
dess中一个简单的多路委托的实现
Jul 20 Javascript
JavaScript Date对象 日期获取函数
Dec 19 Javascript
jquery 缓存问题的几个解决方法
Nov 11 Javascript
javascript中文本框中输入法切换的问题
Dec 10 Javascript
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
Jan 27 Javascript
Require.JS中的几种define定义方式示例
Jun 01 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
Mar 10 Javascript
微信小程序webview实现长按点击识别二维码功能示例
Jan 24 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
Jan 27 jQuery
详解一个基于套接字实现长连接的express
Mar 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中heredoc与nowdoc介绍
2014/12/25 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
javascript常用对话框小集
2013/09/13 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
js定时器实例分享
2016/12/20 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
python错误处理详解
2014/09/28 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
python调用百度语音识别api
2018/08/30 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
Hibernate持久层技术
2013/12/16 面试题
舞蹈毕业生的自我评价
2014/03/05 职场文书
课程改革实施方案
2014/03/16 职场文书
就业意向书范文
2014/04/01 职场文书
同学聚会策划方案
2014/06/06 职场文书
会计系毕业求职信
2014/08/07 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
Go语言应该什么情况使用指针
2021/07/25 Golang