web-dev-qa-db-ja.com

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

}]);

「Unknown provider $ cookieStore」のようなangularjsエラーが出ます。

'myApp'には依存関係があり、 'ngCookies'とangular-cookies.min.jsがロードされるので、そのコードの何が問題になっていますか?

.configでこれを実行しているという事実ですか?

12
kij

構成時にプロバイダーを渡すことのみが可能であるため、リクエストトランスフォーマーではなく、リクエストを実行するためのファクトリーとしてサービスを作成することにより、最終的にhttpパラメーターの上書きを行いました。

以下は、サービスのコード例です(テストのためではなく、参考のためにのみ)。

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

おそらくcookieStoreを追加する必要があります

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

私はこれと同じ問題に遭遇したので、どうやってそれを回避したかを投稿します。基本的に$ injectorモジュールを使用して、必要なサービスのインスタンスを手動で取得しました。これはユーザー定義のサービスでも機能することに注意してください。

 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
BoxBet

Module.run()を使用すると、常に必要なヘッダーを設定するためのよりクリーンな方法のようです。ここで私の答えを参照してください: AngularJS pass requestVerificationToken to a service

0
Josh Russo