Добавить пользовательские заголовки ко всем ресурсам во всех модулях

0

На моем сайте Angular JS у меня много модулей и много ресурсов (из которых я использую Rest API)

Я хочу добавить настраиваемый заголовок для всех исходящих запросов в каждом и каждом модуле.

Например, здесь: 2 модуля: common & ABC

//---File 1 common.js
angular.module("common",[])
.config(['$httpProvider',
    function($httpProvider) 
    {
    $httpProvider.defaults.headers.common['x-access-token'] = 
    'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJOYW1lIjoiQWJkdWwiLCJpYXQiOjE0NjUwMzkwMzgsImV4cCI6MTQ2NTEyNTQzOH0.6BMBuEl2dbL736qUqNYXG29UBn_HRyCyWEmMXSG3euE';
    }
])
.service("commonApi",['$resource',
    function($resource)
    {
        this.getBankList = function()       
        {
            return $resource('api/emi/banklist:quoteId', {  },{}).query(); 
        }
    }]);


//---File 2 abc.js

angular.module("abc",[])
.config(['$httpProvider',
    function($httpProvider) 
    {
    $httpProvider.defaults.headers.common['x-access-token'] = 
    'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJOYW1lIjoiQWJkdWwiLCJpYXQiOjE0NjUwMzkwMzgsImV4cCI6MTQ2NTEyNTQzOH0.6BMBuEl2dbL736qUqNYXG29UBn_HRyCyWEmMXSG3euE';
    }
])
.factory('emiModel', ['$resource',
    function($resource) {
        return $resource('api/emi/QuoteList:quoteId', {  }, {
        update: {   method: 'PUT'   }
        });
    }])

В приведенном выше коде мне пришлось добавить.config для каждого модуля и добавить туда заголовок.

Достаточно много времени, чтобы добавить его в каждый модуль и нарушить принцип DRY.

Есть ли простой способ, с помощью которого я могу добавить эту конфигурацию ко всем модулям в моем приложении, не повторяя код?

Для Carity: я использовал фабрику и сервис, чтобы показать, что я могу использовать что-то, но я все еще хочу, чтобы заголовок передавался.

  • 1
    Вы видели про $ http перехватчик?
  • 0
    @PierreEmmanuelLallemant, даже используя перехватчик, мне придется повторить его или добавить зависимость во всех модулях.
Показать ещё 2 комментария
Теги:

1 ответ

1
Лучший ответ

В приведенном выше коде мне пришлось добавить.config для каждого модуля и добавить туда заголовок.

Достаточно много времени, чтобы добавить его в каждый модуль и нарушить принцип DRY.

Это неверно. Как только модуль загружен, Angular не делает различий между ними.

config блокирует каждый модуль в приложении, в котором загружен common модуль. Т.е. все вызовы $http будут затронуты config в этой настройке:

angular.module("app",["abc", "common"])...
angular.module("abc",[])...

Хотя рекомендуется загружать common модуль в каждый подмодуль, который также зависит от config. Таким образом, они не ломаются в случае, когда они загружаются отдельно от app (например, в спецификациях).

  • 0
    Ты прав . это действительно выполняется, но моя проблема оказалась чем-то другим. Токен, в котором я жестко запрограммирован, например, на самом деле происходит из локального хранилища и что происходит, он не переоценивается. поэтому после входа в систему токен никогда не берется провайдером.
  • 0
    localStorage является синхронным и может быть загружен в config . Если это невозможно по каким-либо причинам, используйте перехватчики, как показано в комментарии выше. Перехватчики могут быть определены в config и они оцениваются при каждом запросе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню