24
我正在使用Angular 2應用程序,並需要一些關於如何處理認證錯誤的指導。Angular 2 - 在單個可觀察點上處理多個訂閱
我的最終目標是能夠集中處理身份驗證錯誤(特別是401和403),每Http
請求。
我發現this問題超級有助於讓我開始,但我堅持正確的方式註冊我的自定義Http
實現返回的每個observable的錯誤處理程序。
這裏是什麼,我目前正與一個樣本:
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請求時的兩倍。這不好。
有關如何正確執行此操作的任何指導?
(更新)工作守則
基於在這裏接受的答案的信息是類看起來像在其正常形態。
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