如何使用角度资源在每个请求上发送自定义标头?

时间:2014-11-21 10:26:08

标签: javascript angularjs header

我喜欢使用angularjs资源在每个请求上发送自定义标头。在每个请求之前,必须再次创建标头。以下不起作用。标头只计算一次,因此只有一个请求有效。对同一资源的第二个请求失败。它的很多复制n贴“header:authhandler.createHeader()”也......

myApp.service('Rest', ['$resource', 'authhandler',
        function($resource, 'authhandler',{
            return {
                User: $resource( api_domain + "/api/users/:userid", {}, {
                    get: {method: 'GET', headers: authhandler.createHeader()},
                    remove: {method: 'DELETE', headers: authhandler.createHeader()},
                    edit: {method: 'PUT', headers: authhandler.createHeader()},
                    add: {method: 'POST', headers: authhandler.createHeader()},
                    patch: {method: 'PATCH', headers: authhandler.createHeader()}
                }),
            };
        }]);

有人知道如何解决这个问题吗? 我有一个有效的解决方案,但我不喜欢它,因为有大量的复制和粘贴源代码:

myApp.controller('MyController', function(RestResource, authhandler, $routeParams) {
    $http.defaults.headers.common = authhandler.createHeader();
    RestResource.get({userid: $routeParams.id}, function(result) {
        //...
    });
});

我会很高兴提示如何解决这个问题!提前谢谢!

1 个答案:

答案 0 :(得分:4)

您可以使用请求转换器:

function($resource, 'authhandler',{
   return {
        User: $resource( api_domain + "/api/users/:userid", {}, {
            get: {
                  method: 'GET',
                  transformRequest: function(data, headersGetter) {
                    var currentHeaders = headersGetter();
                    angular.extend(currentHeaders, authhandler.createHeader());
                    return data;
                  }
                },

您还可以将转换器添加到所有请求中:

myApp.config(['$httpProvider', function($httpProvider) {
  $httpProvider.defaults.transformRequest.push(function(data, headersGetter) {
                    var currentHeaders = headersGetter();
                    angular.extend(currentHeaders, authhandler.createHeader());
                    return data;
                  });

通过这种方式,您无需配置任何资源或资源。