2014-12-08 14 views
5

Tôi có một ứng dụng AngularJS và tôi muốn bộ nhớ cache ứng dịch vụ REST. Tôi tìm thấy một số thư viện như angular-cached-resource có thể thực hiện việc này bằng cách lưu trữ dữ liệu vào bộ nhớ cục bộ của trình duyệt web.REST của dịch vụ chiến lược bộ nhớ cache với AngularJS

Nhưng đôi khi tôi làm một số POST/PUT/DELETE cuộc gọi REST và sau đó một số các câu trả lời dịch vụ REST cache trước đó cần phải được thực hiện một lần nữa. Vì vậy, có vẻ như nó có thể xóa các phản hồi được lưu trữ sau đó và cuộc gọi sẽ được gửi đến máy chủ trong thời gian tới.

Nhưng còn nếu máy chủ gửi cho tôi số HTTP Header một số giá trị như expires hoặc etag thì sao? Tôi phải đọc Tiêu đề HTTP và tự phản ứng hoặc có thư viện trong AngularJS cũng có thể xử lý điều này không? Vì vậy, nếu tôi nên nhấn vào máy chủ và không đọc bộ nhớ cache của bộ nhớ cục bộ phụ thuộc vào các trường Bộ đệm Tiêu đề HTTP và nếu có bất kỳ lệnh gọi PUT/POST/DELETE nào có phản hồi ví dụ "tải lại mọi phần tử cài đặt người dùng "là cần thiết. Vì vậy, tôi phải mất phản ứng này và tạo ra một bản đồ mà nói với tôi rằng cho các dịch vụ ví dụ REST của A, C và F (thiết lập người dùng những thứ liên quan) cần phải nhấn máy chủ một lần nữa thời gian tới khi họ được thực hiện hoặc nếu Cache hết hạn từ HTTP Tiêu đề.

Đây có phải là có thể với một thư viện AngularJS hoặc làm bạn có bất cứ đề nghị nào khác? Tôi nghĩ điều này tương tự như Observer hoặc PubSub Pattern, phải không?

Một điều nữa: Cũng có thể có một cái gì đó như PubSub mà không sử dụng bộ nhớ cache/bộ nhớ cục bộ (vì vậy không có bộ điều khiển bộ đệm HTTP Header)? Vì vậy, tôi không thể gọi dịch vụ REST, vì sau đó nó sẽ nhấn vào máy chủ, mà tôi không muốn trong một số trường hợp (phản hồi từ một cuộc gọi REST trước đó trả về cho tôi sự kiện "tải lại mọi phần tử cài đặt người dùng").

+0

Bạn có thể làm điều đó với một quán rượu/mô hình phụ. Kích hoạt sự kiện với phản hồi quay lại từ yêu cầu đăng/đưa/xóa và yêu cầu người nghe trong các dịch vụ chờ họ sau đó thực hiện yêu cầu GET. – reptilicus

+0

Có, nhưng có thể tôi không cần thực hiện cuộc gọi REST ngay lập tức, vì phần tử trang cần tải lại không hiển thị/trên cùng một trang web. – Tim

+0

Cách chúng ta làm là lắng nghe một sự kiện trong dịch vụ, như userOptionsService và khi POST được gửi, hãy tải lại trong userOptionsService, sau đó trong bộ điều khiển tải dữ liệu được lưu trữ trong userOptionsService.userOptions – reptilicus

Trả lời

0

Bạn có thể thử một cái gì đó như thế này.

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

Đây chỉ là một mã đơn giản mà tôi đã viết để triển khai khái niệm của bạn. Tôi đã không thử nghiệm nó và là tất cả của bạn.

Các vấn đề liên quan