项目背景和上一篇博客一样。
是一个和业务逻辑相关的问题了,就是我做页面路由(确定跳转到哪个page)要从后台拉数据,但是同样的接口在页面里面也会用到,为了更好的利用这一些数据,我在HTTP请求那里做了一点缓存。
js代码是这样写的
var data ={};var memory=function() { function push(key, value) { data[key] = { time: utils.now(), data: value } } function pop(key) { var obj = data[key]; if (obj){ delete cache[key]; if (utils.now() - obj.time 3)return obj.data; } return null; } function invalid(){ data = {}; } return { push: push, pop: pop, invalid: invalid, all: function () { return data; } }}module.exports = memory只拦截GET网络请求,所以网络部分是这样封装的:
function GET(options) { //TODO 缓存键值需要优化 var memory = cache.memory(); if (options && options.url) { if (options.cache) { //拦截成功回调 var originSuccess = options.success; if (originSuccess) { options.success = (resp) = { memory.push(options.url, resp); originSuccess(resp); } } } else { //命中缓存 var target = memory.pop(options.url); if (target && options.success) options.success(target); if (target) return; } } net(options, 'GET')}ps:net 里面会处理很多我们这边的错误码,代码细节就不放上来了。
定义了缓存的有效时间,简单有效的满足了背景需求。用的时候,就是 options.cache=true













