Javascript 基于AngularJS的REST服务缓存策略
我有一个AngularJS应用程序,我想缓存REST服务响应。我找到了一些类似的库,它们可以通过将数据存储到web浏览器的本地存储器中来实现这一点 但有时我会执行一些POST/PUT/DELETE REST调用,然后需要再次执行一些以前缓存的REST服务响应。因此,似乎可以删除缓存的响应,下次将调用发送到服务器 但是如果服务器在Javascript 基于AngularJS的REST服务缓存策略,javascript,angularjs,rest,caching,Javascript,Angularjs,Rest,Caching,我有一个AngularJS应用程序,我想缓存REST服务响应。我找到了一些类似的库,它们可以通过将数据存储到web浏览器的本地存储器中来实现这一点 但有时我会执行一些POST/PUT/DELETE REST调用,然后需要再次执行一些以前缓存的REST服务响应。因此,似乎可以删除缓存的响应,下次将调用发送到服务器 但是如果服务器在HTTP头中向我发送一些值,比如expires或etag,该怎么办?我必须阅读HTTP头并自己做出反应,或者AngularJS中是否有一个库也可以处理这个问题 因此,如果
HTTP头中向我发送一些值,比如expires
或etag
,该怎么办?我必须阅读HTTP头并自己做出反应,或者AngularJS中是否有一个库也可以处理这个问题
因此,如果我点击服务器而不读取本地存储的缓存,则取决于HTTP头缓存字段,以及是否有任何PUT/POST/DELETE调用具有响应,例如需要“重新加载每个用户设置元素”。因此,我必须接受这个响应并创建一个映射,该映射告诉我,例如REST服务a、C和F(与用户设置相关的东西)需要在下次执行时再次访问服务器,或者如果缓存从HTTP头过期
AngularJS库是否可以实现这一点,或者您是否有其他建议?我认为这类似于Observer或PubSub模式,不是吗
还有一件事:是否也可以在不使用缓存/本地存储的情况下使用类似PubSub的东西(因此也没有HTTP头缓存控制)?因此,我无法调用REST服务,因为这样它会攻击服务器,在某些情况下我不希望这样做(来自上一次REST调用的响应,该调用返回事件“重新加载每个用户设置元素”)。您可以尝试类似的方法
app.factory('requestService', ['$http', function ($http) {
var data = {};
var service = {
getCall : funtion(requstUrl, successCallback, failureCallback, getFromCache){
if(!getFromCache){
$http.get(requstUrl)
.success(function(data){
successCallback(data);
data.requstUrl = data;
})
.error(function(){
failureCallback(data);
})
}else{
successCallback(data.requstUrl);
}
},
postCall : function(requestUrl, paramToPass, successCallback, failureCallback, getFromCache){
if(!getFromCache){
$http.post(requestUrl, paramToPass)
.success(function(data){
successCallback(data);
data.requstUrl = data;
})
.error(function(data){
failureCallback(data);
})
}else{
successCallback(data.requstUrl);
}
}
};
return service;
}]);
这只是我为实现您的概念而编写的一段简单代码。我还没有测试过,都是你的。你可以用pub/sub模式来做。使用post/put/del请求返回的响应触发事件,并让服务中的侦听器等待它们,然后执行GET请求。是的,但可能我不需要立即执行REST调用,因为需要重新加载的页面元素不可见/在同一网页上。我们这样做的方式是侦听服务中的事件,与userOptionsService类似,发送POST时,在userOptionsService中重新加载,然后在控制器中加载存储在userOptionsService.UserOptions中的数据它不是非常干净,但可以工作。如果你想出一个不同的方法,让我知道!您是使用JavaScript库还是自己完成的?但是你做了一个REST调用,这对当前网页来说可能不是必需的?