Я создаю webapp используя Angular2.Angular2: Подписаться на все HTTP-запросы
Возможно ли выполнение функции каждый раз, когда Angular2 делает HTTP-запрос?
Это будет использоваться для проверки необходимости обновления токена JWT.
Спасибо!
Я создаю webapp используя Angular2.Angular2: Подписаться на все HTTP-запросы
Возможно ли выполнение функции каждый раз, когда Angular2 делает HTTP-запрос?
Это будет использоваться для проверки необходимости обновления токена JWT.
Спасибо!
Вы можете использовать собственный Http
класс, который обеспечивает наблюдаемую, что компоненты или другие услуги могут подписаться и генерирует событие каждый раз, когда запрос сделан
@Injectable()
class NotifyingHttp extends Http {
requestSent:Subject = new Subject();
requestCompleted:Subject = new Subject();
constructor(_backend: ConnectionBackend, _defaultOptions: RequestOptions) {
super(_backend, _defaultOptions);
}
get(url: string, options?: RequestOptionsArgs) : Observable<Response> {
this.requestSent.next(url);
return super.get(newUrl, options)
.finally(response => this.requestCompleted.next(url));
}
post(...)
...
}
нуждается Каждый метод должен быть переопределен в этом способ (получить, пост ...)
Вы можете создать общий модуль, который затем активируется путем добавления его импорта AppModule
:
@NgModule({
imports: [HttpModule],
export: [HttpModule],
providers: [
{provide: ConnectionBackend: useClass XhrBackend},
{provide: Http, useClass: NotifyingHttp}]
})
export class NotifyingHttpModule {}
@NgModule({
imports: [BrowserModule, NotifyingHttpModule],
declarations: [AppModule],
bootstrap: [AppModule]
})
export class AppModule {}
Смотрите также Angular2 : The responses to HTTP get requests are being cached in IE
Вы должны использовать фабрику. Расширение Http Все еще вызывает конструктор Http, который вызывается угловым, вместо конструктора пользовательского класса ([связанного с этим] (http://stackoverflow.com/a/40295956/2587435)). Поэтому вам нужно использовать завод и создать его самостоятельно. И так как ConnectionBackend - это интерфейс (не поставщик для этого токена), вам нужно использовать XHRBackend для фабрики. –
Это может объяснить, почему я должен был добавить провайдера '{предоставить: ConnectionBackend: useClass XhrBackend}', но это должно быть сделано (согласно тесту в плункере, который я недавно сделал) –