2016-02-16 2 views
4

Как, я хочу обрабатывать ошибки HTTP (особенно статус 401) по всему миру. Я знаю, что могу сделать что-то подобноеУгловой 2 - Как получить Observable.throw глобально

getCompanies() { 
    return this.http.get('https://angular2.apispark.net/v1/companies/') 
     .map(res => res.json()) 
     .catch(res => { 
      return Observable.throw(res.json()); 
     }); 

Как я могу получить эту ошибку на другом компоненте?

Просто объяснить, я хочу реализовать, что все 401 erros перенаправить пользователя на страницу входа в

ответ

8

подход может быть, чтобы расширить объект HTTP для перехвата ошибок:

@Injectable() 
export class CustomHttp extends Http { 
    constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) { 
    super(backend, defaultOptions); 
    } 

    request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> { 
    console.log('request...'); 
    return super.request(url, options).catch(res => { 
     // do something 
    });   
    } 

    get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
    console.log('get...'); 
    return super.get(url, options).catch(res => { 
     // do something 
    }); 
    } 
} 

и зарегистрировать его, как описано ниже:

bootstrap(AppComponent, [HTTP_PROVIDERS, 
    new Provider(Http, { 
     useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions), 
     deps: [XHRBackend, RequestOptions] 
    }) 
]); 

Если 401 возникают ошибки в этом уровне, вы можете перенаправить пользователя на страницу входа в систему на основе текущего маршрутизатора впрыскивается на этом CustomHtt p класс.