私はAngular 2アプリで作業しており、認証エラーをきれいに処理する方法についてのガイダンスが必要です。角度2 - 1つの観測で複数のサブスクリプションを扱う
私の最終目標は、Http
リクエストごとに認証エラー(特に401と403)を集中的に処理できるようにすることです。
私はthis質問のスーパーが私を始めてくれて助かりましたが、自分のカスタムHttp
の実装で返された各オブザーバブルのエラーハンドラを登録する適切な方法については固執しています。
import {Injectable} from 'angular2/core';
import {Http, ConnectionBackend, Request, RequestOptions, RequestOptionsArgs, Response} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class ClauthHttp extends Http {
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
super(backend, defaultOptions);
}
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
var response = super.get(url, options);
return this._handleSecurityResponse(response);
}
/*
Other overrides omitted for brevity...
*/
private _handleSecurityResponse(response: Observable<Response>): Observable<Response> {
response.subscribe(null, (error: Response) => {
// Do some nifty error handling here.
});
return response;
}
}
上記の溶液は、すべてのHTTP要求が2回行われている... 1つのヒッチで「作品」:ここでは
は、私が現在働いているもののサンプルです。それはまずいです。これを正しく行う方法に関するガイダンスはありますか?ここでは受け入れ答えの情報に基づいて
(更新)ワーキングコード
はクラスが適切に機能形でどのように見えるかです。
import {Injectable} from 'angular2/core';
import {Http, ConnectionBackend, Request, RequestOptions, RequestOptionsArgs, Response} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/share';
@Injectable()
export class ClauthHttp extends Http {
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
super(backend, defaultOptions);
}
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
var response = super.get(url, options);
return this._handleSecurityResponse(response);
}
/*
Other overrides omitted for brevity...
*/
private _handleSecurityResponse(response: Observable<Response>): Observable<Response> {
var sharable = response.share();
sharable.subscribe(null, (error: Response) => {
// Do some nifty error handling here.
});
return sharable;
}
}
Thanks..thisで
を置き換える私がいたまさにです探している – prash