业务上遇到了自己控制缓存的需求,于是在 axios 上实现了一个简单的缓存层,抽出来分享一下(`・ω・´)
Github 仓库: axios-cache-plugin
npm install axios-cache-plugin --save-dev
or
yarn add axios-cache-plugin --dev
引入 wrapper,然后裹在 axios 或者 axios 实例上并用返回值替代即可,不用修改业务代码
import axios from 'axios'
import wrapper from 'axios-cache-plugin'
let http = wrapper(axios, {
maxCacheSize: 15
})
export default http
插件并不是缓存全部 GET 请求,而是按正则匹配缓存指定的请求,这要求你添加 filter,url 命中 filter 的请求才会被缓存哦。(默认情况下不缓存任何请求。)
import axios from 'axios'
import wrapper from 'axios-cache-plugin'
let http = wrapper(axios, {
maxCacheSize: 15
})
http.__addFilter(/users/) //添加一个 filter
http({
url: 'http://www.404forest.com:3000/users/jin5354',
//命中 filter 啦,现在 http://www.404forest.com:3000/users/jin5354?test=something 结果会被缓存
method: 'get',
params: {
test: 'something'
}
})
http({
url: 'http://www.404forest.com:3000/users/jin5354',
//重复请求直接返回缓存结果,不再发新请求了。
method: 'get',
params: {
test: 'something'
}
})
包装 axios 实例时可以指定两个缓存配置项:maxCacheSize 和 ttl,非必需指定
maxCacheSize 指定最多可缓存的条目数,超过这个数量时最早的缓存会被删除,默认为 15
ttl 指缓存存活时间,单位为 ms,超过这个时间缓存条目自动消除。
let http = wrapper(axios, {
maxCacheSize: 15,
ttl: 60000
})
积极维护中,欢迎反馈
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.