我正在使用Angular6。我想处理错误响应代码。如果不是400,则意味着我需要重定向到其他页面。
在这里,我面临两个问题。
第一个,我无法获得错误响应代码。它始终仅返回零(0)。
第二个,如果我得到的响应码不是400,则无法重定向到另一页。
下面我粘贴了我正在使用的代码。
import { Injectable } from '@angular/core';
import { Http, Response, RequestOptions, Headers, Request, RequestMethod, URLSearchParams, ResponseContentType } from '@angular/http';
import { BehaviorSubject, ReplaySubject } from 'rxjs';
import { Observable } from 'rxjs';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/empty';
import { environment } from '../../environments/environment';
import { JwtService } from './jwt.service';
import { Router } from '@angular/router';
@Injectable()
export class CallapiService {
private api_base_url: string = '';
private default_api_key: string = '';
private key: string = '';
private host: string = '';
private system: string = '';
constructor(private http: Http, private jwtService: JwtService, private router: Router) {
this.api_base_url = environment.api_end_point;
this.host = environment.base_url;
this.system = environment.system;
}
private contains(a, obj) {
var i = a.length;
while (i--) {
if (a[i] === obj) {
return true;
}
}
return false;
}
private setHeaders(headers: Object = {}): Headers {
headers['Accept'] = 'application/json';
headers['Content-Type'] = 'application/json';
headers['Access-Control-Allow-Origin'] = '*';
headers['Access-Control-Allow-Methods'] = 'GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS';
if (this.jwtService.getToken()) {
headers['Authorization'] = `Bearer ${this.jwtService.getToken()}`;
}
return new Headers(headers);
}
private formatErrors(error: any) {
console.log(error);
if (error.status != 400) {
this.router.navigate(['users/login']);
return Observable.empty();
}
if (error.status == 401) {
localStorage.clear();
window.location.reload();
}
return Observable.throw(error.json());
}
get(path: string, params: URLSearchParams = new URLSearchParams()): Observable<any> {
return this.http.get(`${environment.base_url}${path}`, { headers: this.setHeaders({}), search: params })
.catch(this.formatErrors)
.map(this.extractData);
}
public extractData(res: Response) {
try {
return res.json();
} catch (e) {
return {};
}
}
}
请帮助我解决此问题。