angularjsangularjs-resource

How can I get status code using $resource?


My factory for making request is here:

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

The code in controller is here:

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

Ideally it should log the status as in $http request but I am unable to get it for $reource


Solution

  • I tried use promises with $q to handle this kind of scenario where I had to have more control on failure or success. I refactored the factory like here:

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

    Here is the complete solution in this pen (uses mock json to simulate the response)