使用AngularJS的REST服务缓存策略

Tim*_*Tim 5 javascript rest caching angularjs

我有一个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调用的响应返回我的事件"重新加载每个用户设置元素").

Par*_*ras 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;
}]);
Run Code Online (Sandbox Code Playgroud)

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