Javascript 基于AngularJS的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中是否有一个库也可以处理这个问题 因此,如果

我有一个AngularJS应用程序,我想缓存REST服务响应。我找到了一些类似的库,它们可以通过将数据存储到web浏览器的本地存储器中来实现这一点

但有时我会执行一些POST/PUT/DELETE REST调用,然后需要再次执行一些以前缓存的REST服务响应。因此,似乎可以删除缓存的响应,下次将调用发送到服务器

但是如果服务器在
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调用,这对当前网页来说可能不是必需的?