我有一个AngularJS应用程序,我想缓存REST服务响应。我发现像angular-cached-resource这样的库可以通过将数据存储到Web浏览器的本地存储中来实现。
但有时候我会做一些POST / PUT / DELETE REST调用,然后需要再次执行一些以前缓存过的服务响应。因此,似乎可以删除缓存的响应,然后调用将在下次发送到服务器。
但是,如果服务器通过HTTP Header
向我发送了expires
或etag
等值,那该怎么办?我必须自己阅读HTTP Header并做出反应,或者AngularJS中是否有可以处理此问题的库?
因此,如果我应该点击服务器而不读取本地存储的缓存依赖于HTTP头缓存字段,并且是否有任何PUT / POST / DELETE调用具有响应,例如"重新加载每个用户设置元素"是必要的。所以我必须采取这个响应并创建一个地图,告诉我例如REST服务A,C和F(用户设置相关的东西)需要在下次执行时再次点击服务器,或者缓存是否从HTTP到期头。
这是否可以使用AngularJS库,或者您有其他建议吗?我认为这类似于Observer或PubSub Pattern,不是吗?
还有一件事:是否也可以在不使用缓存/本地存储的情况下使用PubSub之类的东西(所以也没有HTTP Header Cache控件)?所以我不能调用REST服务,因为它会触及服务器,在某些情况下我不想要(从之前的REST调用返回我的事件"重新加载每个用户设置元素" )。
答案 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;
}]);
这只是我为实现您的概念而编写的一个简单代码。我没有经过测试,而且全都是你的。