AngularJS - Неизвестный поставщик, настраивающий $httpProvider
В следующем примере кода:
myApp.config(['$httpProvider', function($httpProvider, $cookieStore) {
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.headers.get['Authorization'] = 'Basic '+ $cookieStore.get('myToken');
return JSON.stringify(data);
}]);
Я получаю ошибку angularjs, например "Неизвестный поставщик $cookieStore".
'myApp' имеет dependenciy и 'ngCookies' и angular -cookies.min.js является laoded, так что же не так с этим кодом?
Является ли это тем, что я делаю это в .config?
Ответы
Ответ 1
Поскольку при настройке можно пропускать провайдеров, я, наконец, выполнил перезапись моего параметра http не с помощью трансформатора запроса, а путем создания службы как factory для выполнения запросов.
Вот пример кода службы (не проверен, просто для информации):
angular.module('myapp-http-request', []);
angular.module('myapp-http-request')
.factory('MyRequests', function($http, $cookieStore){
return {
request: function(method, url, data, okCallback, koCallback){
$http({
method: method,
url: url,
data: data
}).success(okCallback).error(koCallback);
},
authentifiedRequest: function(method, url, data, okCallback, koCallback){
$http({
method: method,
url: url,
data: data,
headers: {'Authorization': $cookieStore.get('token')}
}).success(okCallback).error(koCallback);
}
}
});
И пример использования (не проверен, просто для информации):
angular.module('sharewebapp', ['myapp-http-request'])
.controller('MyController', ['MyRequests', function(MyRequests){
MyRequests.authentifiedRequest('DELETE', '/logout', '', function(){alert('logged-out');}, function(){alert('error');})
}]);
Ответ 2
Вероятно, вам нужно добавить файл cookieStore
myApp.config(['$httpProvider', '$cookieStore', function($httpProvider, $cookieStore)
Ответ 3
Я столкнулся с этой проблемой, поэтому я опубликую, как я ее обошел. Я по существу использовал модуль инжектора $для ручного захвата экземпляра службы, в которой я нуждался. Обратите внимание, что это также работает для определенных пользователем служб.
angular.module('app').
config(config);
config.$inject = ['$httpProvider'];
function config($httpProvider) {
//Inject using the $injector
$httpProvider.interceptors.push(['$injector', function($injector){
return {
request: function(config) {
//Get access by injecting an instance of the desired module/service
let $cookieStore = $injector.get('$cookieStore');
let token = $cookieStore.get('your-cookie-name');
if (token) {
config.headers['x-access-token'] = token;
}
return config;
}
}
}])
}
Ответ 4
Использование Module.run() кажется более чистым способом установки заголовков, которые всегда необходимы. См. Мой ответ здесь: Запрос на уклонение от AngularJSВертификацияПодробнее об услуге