Question AngularJS - Fournisseur inconnu configurant $ httpProvider


Dans l'exemple de code suivant:

myApp.config(['$httpProvider', function($httpProvider, $cookieStore) {

    $httpProvider.defaults.withCredentials = true;

    $httpProvider.defaults.headers.get['Authorization'] = 'Basic '+ $cookieStore.get('myToken');

    return JSON.stringify(data);

}]);

Je reçois une erreur angularjs comme "Unknown provider $ cookieStore".

"myApp" a une dépendance et "ngCookies" et angular-cookies.min.js sont affichés, alors qu'est-ce qui ne va pas avec ce code?

Est-ce le fait que je le fais dans .config?


11
2018-06-26 09:09


origine


Réponses:


Comme il est uniquement possible de passer des fournisseurs lors de la configuration, j'ai finalement effectué le remplacement de mon paramètre http, non pas avec un transformateur de requête, mais en créant un service en tant que fabrique pour effectuer des requêtes.

Voici un exemple de code du service (non testé, juste pour information):

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);
        }
    }
});

Et exemple d'utilisation (non testé, juste pour information):

angular.module('sharewebapp', ['myapp-http-request'])
.controller('MyController', ['MyRequests', function(MyRequests){
    MyRequests.authentifiedRequest('DELETE', '/logout', '', function(){alert('logged-out');}, function(){alert('error');})
}]);

14
2018-06-26 10:43



Vous devez probablement ajouter le cookieStore

myApp.config(['$httpProvider', '$cookieStore', function($httpProvider, $cookieStore) 

2
2018-06-26 09:19



Je me suis heurté à ce même problème, alors je vais poster comment je l'ai contourné. J'ai essentiellement utilisé le module $ injector pour saisir manuellement une instance du service dont j'avais besoin. Notez que cela fonctionne également pour les services définis par l'utilisateur.

 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;
    }
  }
}])
}

2
2017-09-09 04:08



Utiliser le Module.run () semble être un moyen plus propre de définir des en-têtes toujours nécessaires. Voir ma réponse ici: AngularJS demande de passationVérificationTélécharger à un service


0
2018-01-13 15:11