Невозможно установить значения http по умолчанию внутри фабрики angularjs

В моем приложении Angularjs у меня есть фабрика, и мне нужно аутентифицировать пользователя. Я использую httpProvider для установки значений по умолчанию. Но я получаю сообщение об ошибке $httpProvider не определено.

'use strict';
 angular.module('myApp')
.factory('authService', function ($q, $http, $rootScope, $window) {
    return {
        authenticateUser: function () {
           ........
           ........
       $httpProvider.defaults.headers.common['Accept'] = 'application/json, text/javascript';
       $httpProvider.defaults.headers.common['Content-Type'] = 'application/json; charset=utf-8';

Затем я попытался добавить $httpProvider в заводскую зависимость

'use strict';
 angular.module('myApp')
.factory('authService', function ($q, $http, $rootScope, $window, httpProvider ) {
    return {
        authenticateUser: function () {
           ........
           ........
       $httpProvider.defaults.headers.common['Accept'] = 'application/json, text/javascript';
       $httpProvider.defaults.headers.common['Content-Type'] = 'application/json; charset=utf-8';

На этот раз я получаю Unknown provider: $httpProviderProvider <- $httpProvider <- authService

Пожалуйста, дайте мне знать, где я ошибаюсь.


person zilcuanu    schedule 22.02.2016    source источник


Ответы (2)


Вы не можете получить поставщика услуг внутри завода.

Вы можете использовать interceptors для добавления значения по умолчанию к каждому HTTP-запросу.

angular.module('myApp').config(function ($httpProvider) {
    $httpProvider.interceptors.push('authInterceptorService');
});

angular.module('myApp').factory('authInterceptorService', ['$q', '$location', 'localStorageService', function ($q, $location, localStorageService) {
var authInterceptorServiceFactory = {};
var _authentication = {
    isAuth: false,
    userName: ""
};

var _request = function (config) {
    config.headers = config.headers || {};
    var authData = localStorageService.get('data');
    if (authData) {
        config.headers.Authorization = 'Bearer ' + authData;
    }

    return config;
}

authInterceptorServiceFactory.request = _request;

return authInterceptorServiceFactory;
}]);
person Abhilash Augustine    schedule 22.02.2016
comment
Я видел это в вашем фрагменте кода: $httpProvider.interceptors.push('authInterceptorService'); Что делать, если у меня много служб, где мне нужно использовать interceptors? - person zilcuanu; 22.02.2016
comment
Один вопрос. Где я config определил? Я получаю config как undefined - person zilcuanu; 22.02.2016
comment
@Pradeep, о чем config ты спрашиваешь? angular.module.config() или параметр с именем config? - person Abhilash Augustine; 22.02.2016
comment
@Pradeep, наш interceptorsFactory.request() будет запущен, когда мы сделаем запрос $http от angularJS. Он должен передать объект конфигурации методу request(). - person Abhilash Augustine; 22.02.2016
comment
@Pradeep, ваш метод _request () срабатывает при выполнении запроса http? - person Abhilash Augustine; 22.02.2016
comment
Понятно. Спасибо, что сообщили мне об этой функции в Angularjs. - person zilcuanu; 22.02.2016
comment
Давайте продолжим обсуждение в чате. - person zilcuanu; 23.02.2016

$httpProvider доступен только в конфигурации, например

angular.module('myApp')
.config(function($httpProvider){
   $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
})
person Rebornix    schedule 22.02.2016
comment
Будет ли эта конфигурация применяться ко всем запросам в приложении или нам нужно использовать interceptors для всех request? - person zilcuanu; 22.02.2016
comment
@Pradeep да, это будет применяться ко всем запросам :) - person Rebornix; 22.02.2016