Tôi đang làm việc trên ứng dụng Angular 2 và cần một số hướng dẫn về cách xử lý lỗi xác thực một cách rõ ràng.Góc 2 - Xử lý nhiều đăng ký trên một quan sát duy nhất
Mục tiêu cuối cùng của tôi là có thể quản lý tập trung các lỗi xác thực (cụ thể là 401 và 403) cho mỗi yêu cầu Http
.
Tôi đã tìm thấy this câu hỏi cực kỳ hữu ích để bắt đầu, tuy nhiên, tôi bị mắc kẹt theo cách thích hợp để đăng ký trình xử lý lỗi của mình cho mỗi quan sát được thực hiện tùy chỉnh Http
.
Dưới đây là một mẫu của những gì tôi đang làm việc với:
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;
}
}
Các giải pháp trên "làm việc" với một xô ... Mỗi yêu cầu HTTP được thực hiện hai lần. Điêu đo không tôt.
Bất kỳ hướng dẫn nào về cách thực hiện đúng cách này?
(Cập nhật) Mã Working
Dựa trên thông tin trong câu trả lời chấp nhận đây là những gì lớp trông giống như trong hình thức hoạt động bình thường của nó.
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 là chính xác những gì tôi đã được tìm kiếm – prash