2016-04-21 17 views
0

Мне нужно, чтобы в моем угловом 2 -истребителе был HTTP-перехватчик, который проверяет код состояния HTTP каждого ответа. Если код состояния 401, я хочу перенаправить пользователя на сайт входа.HTTP-перехватчик в угловом 2

Есть ли простой способ реализовать это?

Спасибо!

ответ

1

Вы могли бы реализовать класс, который расширяет 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 возникают ошибки в этом уровне, вы могли бы перехватить их по всему миру в обратный вызов catch. Вы можете использовать внедренные элементы для их обработки. Например, Router.

+0

Whith этого подхода я получаю всегда следующую ошибку: улов не является функцией я демонстрирую это уже: https://github.com/lexon0011/IssueDemonstrator Может кто-нибудь воспроизвести ошибку? –

+0

См. Этот вопрос: http://stackoverflow.com/questions/34515173/angular-2-http-get-with-typescript-error-http-get-map-is-not-a-function-in/34515276#34515276 Вам нужно импортировать оператор catch, как для карты (замените карту на catch в ответе ;-)) –

Смежные вопросы