Define the header on all $ resource methods

advertisements

I'm using ng-resource in Angular to access a RESTful API. I created a simple factory to perform this.

.factory('Bookmark', function($resource){
    return $resource('http://bookmarks-angular.herokuapp.com/api/bookmarks/:id');
})

And in the controller I used Bookmark.query:

.controller('MainController', function($scope, Category, Bookmark){
    $scope.name = 'Carl';
    Category.getAll(function(data){
        $scope.categories = data.categories;
        $scope.currentCategory = data.categories[0];
        $scope.bookmarks = Bookmark.query();
    });
})

I need to use Bookmark.save and Bookmark.removeand also a token in the Authorization header. Searching this is the approach I have to use:

$resource('url/to/json', {}, {
    get: {
        method: 'GET',
        headers: { 'something': 'anything' }
    }
});

But it works just to the get method and I want to use send the token in every $resource methods. I do not want to overwrite all the methods just to send this header. Is there any other solution?


You can create an httpInterceptor, something like this from the angular docs:

$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
    return {
      'request': function(config) {
          // add headers
          return config;
    }
}

https://docs.angularjs.org/api/ng/service/$http