0
我有一個HTTP攔截器來監視401錯誤和超時錯誤。當我在裏面導入一個服務時。跟它的服務是不明確的HTTP攔截器內的模塊導入得到未定義
我的HTTP攔截
// dependencies
import { Injectable } from '@angular/core';
import { ConnectionBackend, XHRBackend, RequestOptions, Request, RequestOptionsArgs, Response, Http, Headers } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import { environment } from '../../../environments/environment';
import { Router } from '@angular/router';
import { NotificationService } from '@sharedServices/notification/notification.service';
@Injectable()
export class HttpInterceptor extends Http {
constructor(backend: XHRBackend, defaultOptions: RequestOptions, private _router: Router, private _notify: NotificationService) {
super(backend, defaultOptions);
}
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
return super.request(url, options)
.timeout(2000) // set timeout 15s for every request
.catch((error: Response) => {
if (error.status === 401 || error.status === 403) {
console.log('unAuthorized access');
this._router.navigate(['/login'], { queryParams: { returnUrl: this._router.url } });
}
if (error['name'] === 'TimeoutError') {
console.log(this._notify) // undefined here
}
return Observable.throw(error);
});
}
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
url = this.updateUrl(url);
return super.get(url, this.getRequestOptionArgs(options));
}
post(url: string, body: string, options?: RequestOptionsArgs): Observable<Response> {
url = this.updateUrl(url);
return super.post(url, body, this.getRequestOptionArgs(options));
}
put(url: string, body: string, options?: RequestOptionsArgs): Observable<Response> {
url = this.updateUrl(url);
return super.put(url, body, this.getRequestOptionArgs(options));
}
delete(url: string, options?: RequestOptionsArgs): Observable<Response> {
url = this.updateUrl(url);
return super.delete(url, this.getRequestOptionArgs(options));
}
private updateUrl(req: string) {
return environment.origin + req;
}
private getRequestOptionArgs(options?: RequestOptionsArgs): RequestOptionsArgs {
const request_headers = {
'Content-Type': 'application/json',
'X-Requested-By': 'api-client'
};
if (options == null) {
options = new RequestOptions();
}
if (options.headers == null) {
options.headers = new Headers(request_headers);
}
return options;
}
}
我的HTTP攔截廠
// dependencies
import { XHRBackend, Http, RequestOptions } from '@angular/http';
import { HttpInterceptor } from './http-interceptor';
import { Router } from '@angular/router';
// shared services
import { NotificationService } from '@sharedServices/notification/notification.service';
export function HttpFactory(xhrBackend: XHRBackend, requestOptions: RequestOptions, _router: Router, _notify: NotificationService): Http {
return new HttpInterceptor(xhrBackend, requestOptions, _router, _notify);
}
的通知裏面的catch塊被不確定的。我無法弄清楚爲什麼會發生這種情況。
我對此很新穎。我究竟做錯了什麼?
聽起來像是你應該看看新的'HttpClient',因爲有攔截建設項。 https://angular.io/guide/http – cyrix
謝謝。 :)。我會看看它。你能說我在這裏做錯了什麼@cyrix –