Vue.js 使用 axios 缓存 http 请求

Posted

技术标签:

【中文标题】Vue.js 使用 axios 缓存 http 请求【英文标题】:Vue.js cache http requests with axios 【发布时间】:2018-09-15 05:03:28 【问题描述】:

我正在使用 Vue.js 开发 PWA。 当用户启动它时,需要来自另一个应用程序的一些信息。为此,我正在使用 axios

let url = 'url';
axios.get(url).then((response) => 
  callback(response.data)
)

只要用户在线,它就可以正常工作。如果网络连接正常,则应通过 URL 检索数据,如果没有 Internet 连接,则应从缓存中加载数据。这怎么可能?

【问题讨论】:

您可以阅读服务工作者以及如何使用它进行缓存。 developers.google.com/web/ilt/pwa/… support for caching get request上还有一个老问题。 浏览器不缓存带有查询参数的 url 【参考方案1】:

您可以查看此扩展程序https://github.com/kuitos/axios-extensions

这里是基本用法示例,希望对你有帮助

import axios from 'axios';
import  cacheAdapterEnhancer  from 'axios-extensions';

const http = axios.create(
    baseURL: '/',
    headers:  'Cache-Control': 'no-cache' ,
    // cache will be enabled by default
    adapter: cacheAdapterEnhancer(axios.defaults.adapter)
);

http.get('/users'); // make real http request
http.get('/users'); // use the response from the cache of previous request, without real http request made
http.get('/users',  cache: false ); // disable cache manually and the the real http request invoked

【讨论】:

-1 此适配器库将忽略来自数据提供者的所有缓存指令,并使用消费者端配置进行缓存(默认为 5 分钟)。如果您可以控制源数据/服务,请使用适当的 HTTP 缓存指令。尤其是因为 OP 提到了 PWA,所以 Service Worker 在这里是一个更好的解决方案,因为它们是为这个确切的问题而设计的。 @Phil 如果您想通过一些简单的软件设置指针来扩展它,这将是一个很好的答案。我们正在处理一个类似的问题,通过 axios 从 CDN 获取设计资源,并希望浏览器像缓存典型图像等一样缓存它们 在url中添加查询参数会起作用吗?

以上是关于Vue.js 使用 axios 缓存 http 请求的主要内容,如果未能解决你的问题,请参考以下文章

vue中axios怎么分服务

vue.js中axios的封装(参考)

vue中使用Ajax(axios)

Vue.js Ajax(axios)

vue.js axios使用

vue.js 中的 $http.get() 与 axios.get() 有啥区别?