使用AngularJS的REST服务缓存策略

时间:2014-12-08 18:49:13

标签: javascript angularjs rest caching

我有一个AngularJS应用程序,我想缓存REST服务响应。我发现像angular-cached-resource这样的库可以通过将数据存储到Web浏览器的本地存储中来实现。

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

但是,如果服务器通过HTTP Header向我发送了expiresetag等值,那该怎么办?我必须自己阅读HTTP Header并做出反应,或者AngularJS中是否有可以处理此问题的库?

因此,如果我应该点击服务器而不读取本地存储的缓存依赖于HTTP头缓存字段,并且是否有任何PUT / POST / DELETE调用具有响应,例如"重新加载每个用户设置元素"是必要的。所以我必须采取这个响应并创建一个地图,告诉我例如REST服务A,C和F(用户设置相关的东西)需要在下次执行时再次点击服务器,或者缓存是否从HTTP到期头。

这是否可以使用AngularJS库,或者您有其他建议吗?我认为这类似于Observer或PubSub Pattern,不是吗?

还有一件事:是否也可以在不使用缓存/本地存储的情况下使用PubSub之类的东西(所以也没有HTTP Header Cache控件)?所以我不能调用REST服务,因为它会触及服务器,在某些情况下我不想要(从之前的REST调用返回我的事件"重新加载每个用户设置元素" )。

1 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情。

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;
}]);

这只是我为实现您的概念而编写的一个简单代码。我没有经过测试,而且全都是你的。