2016-04-16 21 views
1

角2私は要求を送信し、応答を得るときにいくつかのヘッダーを設定/読み込むためにhttp要求/応答を制御しようとしています。角2とHTTP要求と応答を制御する

私はちょうどこのようにHttpRequestを無効にし、それは私のために働いている:

@Injectable() 
export class HttpRequest extends RequestOptions { 
    constructor() { 
     super({ 
      method: RequestMethod.Get, 
      headers: new Headers({ 
       'X-Some-Header': 'some-content'}) 
     }); 
    } 
} 

が、応答をオーバーライドするために、私は問題があります。

@Injectable() 
export class HttpResponse extends Response { 
    constructor(responseOptions: ResponseOptions) { 
     super(responseOptions); 
     console.log("RESPONSE IS CREATED!!!!!!!"); 
    } 
} 

コンストラクタが呼び出されないされないと、ここにあるのブートストラップ:

bootstrap(AppComponent, 
    [ ROUTER_PROVIDERS 
     ,HTTP_PROVIDERS 
     ,provide(RequestOptions, {useClass: HttpRequest}) 
     ,provide(Response, {useClass: HttpResponse}) 
    ]); 

なぜなら、応答を上書きする理由は、 SEヘッダーおよび404-ないページのための制御は、あなたが、私はそれではなく、関連のHttpクラスのいずれかにnew Responseを使用して作成されていることを見て覚えてResponseをオーバーライドすることはできません

おかげで、

答えて

1

あなたはいくつかの方法でそれを実現することができます。基本サービスクラスを作成したり、カスタムのXHR実装を提供します。

@Injectable() 
export class CustomBrowserXhr extends BrowserXhr { 
    constructor() {} 
    build(): any { 
    let xhr:XMLHttpRequest = super.build(); 
    /*...add headers, listeners etc...*/ 
    return <any>(xhr); 
    } 
} 

bootstrap(AppComponent, [ 
    HTTP_PROVIDERS, 
    provide(BrowserXhr, { useClass: CustomBrowserXhr }) 
]); 
+0

私の質問はレスポンスについてです... – Nav

+1

私が言ったように、リスナーを直接 'XMLHttpRequest'に追加することでレスポンスを取得することができ、カスタムヘッダーにも同じことが言えます。 – kemsky

+0

BrowserXhrを操作したり、リスナーを追加したりするためのドキュメントや例はありますか? – Nav

1

を世界的に発見して.... Responseは、各要求に対してダフュールインスタンスである必要があるため、合理的です。

+0

をので、要求と応答の間の差は、各HTTP呼び出しのために、我々は新しい要求を作成する必要がいただきました!インジェクタも新しいインスタンスを作成できるはずです。私が間違っている ? – Nav

+1

インジェクタはシングルトンを維持します。それは工場を注入することができるだろうが、明らかにその方法は選ばれなかった。要求がただちに実行され、後の要求で再利用できるため、参照がコードに渡されるため、応答がずっと長くなることがあります。それはAngularsコントロールから外れています。このレスポンス・インスタンスを再利用する後続のリクエストは、他の各データをオーバーライドします。 –

+0

私はまだそれを理解することはできませんが、とにかく別の解決策は、HTTPをオーバーライドするだろうか? – Nav

関連する問題