为什么angularjs没有将我的请求缓存到github api?

时间:2013-06-01 07:40:56

标签: caching angularjs jsonp github-api

我在控制器中使用了一个小型回购工厂服务:

我的控制器:

angular.module('repoApp')
  .controller('MainCtrl', function ($scope, $repoService) {
    $scope.repos = $repoService.getRepos();
  });

我的工厂:

angular.module('repoApp')
  .factory('$repoService', function ($http) {
    var repos =
      // $http.defaults.headers['If-Modified-Since'] = 'Sat, 01 Jun 2013 1:31:30 GMT';
      $http.jsonp('https://api.github.com/repos/mojombo/jekyll/issues?state=closed&callback=JSON_CALLBACK',
      {
        cache: true
      }
    );
    // Public API here
    return {
      getRepos: function () {
        return repos.then(function(repoData) {
          return repoData.data.data;
        });
      }
    };
  });

这很好用 - 我得到了结果,但每次浏览器刷新时,我最终得到200响应而不是304.我做错了什么?

我也尝试使用this closed issue中提到的JSON_SINGLE_CALLBACK

1 个答案:

答案 0 :(得分:0)

您实际上并没有使用GitHub方法来检查一组修改过的问题。您已将其注释掉,但我不确定问题列表是否实际返回(或使用)Last-Modified / If-Modified-Since标头。它应返回ETag标题,然后您可以使用If-None-Match发回。否则,我可能会猜测,角度只会缓存单页面加载,如果你添加了一种测试方式(没有在浏览器中刷新页面),例如,重新发出此请求的按钮,你可能会请参阅角度缓存请求。

然后你应该检查文档,看看你是否应该期待200(原始响应)或304(假响应)。您还应该检查响应上的标题,看看您的ratelimit是否发生了变化。