如何使用$ resource获取状态代码?

时间:2014-12-26 10:05:41

标签: angularjs angularjs-resource

我提出要求的工厂在这里:

angular.module('myapp').factory('testResponse',
        ['$http', '$resource', 'AppConfig', '$routeParams', '$rootScope',
            function($http, $resource, $routeParams, $rootScope) {
                $http.defaults.headers.common['Authorization'] = authorizationHeader;
                $http.defaults.headers.post['Content-Type'] = 'application/json';
                return $resource('test.json'), {}, {
                    query: {method: 'GET'}
                };
            }]);

控制器中的代码在这里:

angular.module('myapp').controller('TestCtrl',
        ['$http', '$scope', 'testResponse', 'AppConfig', function TestCtrl($http, $scope, testResponse) {
                testResponse.query(function(data) {
                    console.log(data.status);
                })
            }]);

理想情况下,它应该记录$ http请求中的状态,但我无法获得$ reource

3 个答案:

答案 0 :(得分:4)

在服务testResponse中,您可以将return语句更改为此

return $resource('test.json'), {}, {
    query: {
        method: 'GET',
        transformResponse: function(data, headers,statusCode) {
            console.log(statusCode);//prints 200 if nothing went wrong
            var finalRsponse = {
                data: data,
                responseStatusCode: statusCode
            };
        return finalRsponse;
    }}
};

在您的控制器的testResponse服务的成功方法(成功,错误)中,您可以使用data.responseStatusCode访问状态代码。

我已在angularjs-1.2.321.5.7上对其进行了测试。

答案 1 :(得分:0)

['$http', '$resource', 'AppConfig', '$routeParams', '$rootScope',
        function($http, $resource, $routeParams, $rootScope) {

您错过了AppConfig参数。

答案 2 :(得分:0)

我尝试使用带有$ q的promises来处理这种情况,我必须对失败或成功有更多的控制权。 我像这里一样重构工厂:

var defObj = $q.defer();
  var testResponse = $resource('https://jsonplaceholder.typicode.com/posts/1', {}, {
    query: {
      method: 'GET'
    }
  });
  testResponse.query().$promise.then(function(data) {
    //you can add anything else you want inside this function
    defObj.resolve(data);
    console.log(defObj, data);
  }, function(error) {
    //you can add anything else you want inside this function
    console.error("Service failure: " + error);
  });
  return defObj.promise;
}

以下是this pen 中的完整解决方案(使用模拟json来模拟响应)