2016-04-26 10 views
-1

$ httpで渡されたオブジェクトにインターセプタを追加するのではなく、インターセプタでhttpリクエストURLを準備しようとしました。AngularJSのインターセプタでHTTPリクエストURLを準備する

angular.module('myapp', []) 

.service('myservice', function() { 
    this.myfunction = function() { 
     var req = {method: 'POST', reqName: 'getInfo'}; 
     return $http(req); 
    } 
}) 

.factory('myInterceptor', function() { 
    var interceptor = { 
     'request': function(config) { 
      config.url = "http://www.myapi.com/demo/"+config.reqName; 
      return config; 
     } 
    } 
    return interceptor; 
}) 

.config(function($httpProvider) { 
    $httpProvider.interceptors.push('myInterceptor'); 
}) 

しかし、私はエラーを取得しています、こう述べています:

Error: [$http:badreq] Http request configuration url must be a string.

Received: undefined

すべてのヘルプここに私が試したコードのサンプルはありますか?

+0

は、configオブジェクトを返し、その後https://docs.angularjs.org/api/ng/service/$http#interceptorsをお読みください'myInterceptor'工場から –

+0

@KrzysztofSafjanowskiあなたはそれを簡単に説明していただけますか? –

+0

工場**は変数 'interceptor'を返します。 'myInterceptor'に' return interceptor'というステートメントを追加すると、あなたの問題は解決します。 –

答えて

0

AngularJSの文書が正しいことを証明するテストをいくつか見てみましょう。

インターセプタに関するいくつかの詳細 - http://docs.angularjs.org/api/ng/service/$http#interceptors

angular.module('myApp', []) 
 
    .service('service', function($http) { 
 
    this.myfunction = function() { 
 
     var req = { 
 
     method: 'POST', 
 
     reqName: 'getInfo' 
 
     }; 
 
     return $http(req); 
 
    } 
 
    }) 
 
    .factory('myInterceptor', function() { 
 
    var interceptor = { 
 
     'request': function(config) { 
 
     config.url = "http://www.myapi.com/demo/" + config.reqName; 
 
     return config; 
 
     } 
 
    } 
 
    return interceptor; 
 
    }) 
 
    .config(function($httpProvider) { 
 
    $httpProvider.interceptors.push('myInterceptor'); 
 
    }) 
 

 

 
describe("myApp", function() { 
 
    beforeEach(module("myApp")); 
 

 
    it("executes intercpetor that changes request", inject(function(service, $httpBackend) { 
 
    $httpBackend.expectPOST("http://www.myapi.com/demo/getInfo").respond(201, []); 
 

 
    service.myfunction().then(function(r) { 
 
     expect(r.config.url).toBe('http://www.myapi.com/demo/getInfo') 
 
    }) 
 

 
    $httpBackend.flush(); 
 
    })); 
 
});
<link href="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine.css" rel="stylesheet" /> 
 
<script src="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js"></script> 
 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-resource.min.js"></script> 
 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-mocks.js"></script>

+0

への依存として** $ http **を追加することができません。これは助けになりません! –

+0

ドキュメントと私の答えとあなたのコードの違いを見つけてください –

+0

申し訳ありませんが、それは私のために働いていません。あなたがフィドルを分かち合うことができれば、私は素晴らしいことになるでしょう。 –

関連する問題