我遇到了获取HTTP状态代码的问题,在HTTP中,我可以很容易地使用response.status,获得响应代码,但是当我使用HttpClient
模块时,我无法获得response.status,它显示出找不到状态。
因此,如何使用response.status中的HttpClient
模块获得Angular 4&5
。请帮帮忙。
餐厅供应:-
@Injectable()
export class RestProvider {
private apiUrl = 'https://restcountries.eu/rest/v2/al';
constructor(public http: HttpClient) {
console.log('Hello RestProvider Provider');
}
getCountries(): Observable<{}> {
return this.http.get(this.apiUrl).pipe(
map(this.extractData),
catchError(this.handleError)
);
}
private extractData(res: Response) {
let body = res;
return body || { };
}
private handleError (error: Response | any) {
let errMsg: string;
if (error instanceof Response) {
const err = error || '';
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
}
HomePage:
export class HomePage {
responseStatus: number;
countries: any;
errorMessage: string;
constructor(public navCtrl: NavController, public navParams: NavParams, public rest: RestProvider) {
}
ionViewDidLoad() {
this.getCountries();
}
getCountries() {
this.rest.getCountries().subscribe(res =>{
this.countries=res;
console("status code--->"+res.status)
},
err=>{
console("status code--->"+err.status)
})
}
}
发布于 2018-06-19 04:56:43
要获得完整的响应,需要在响应中添加额外的属性,即observe
-
getCountries(): Observable<{}> {
return this.http.get(this.apiUrl, {observe: 'response'}).pipe(
map(this.extractData),
catchError(this.handleError)
);
}
想了解更多信息,你可以参考-
发布于 2018-06-19 12:55:17
将observe : 'response'
添加到http.get
方法的头选项中,如
getCountries(): Observable<{}> {
return this.http.get(this.apiUrl,{observe : 'response'}).pipe(
map(this.extractData),
catchError(this.handleError)
);
}
订阅get()方法,以获得您想要的响应状态,就像您所做的那样
getCountries() {
this.rest.getCountries().subscribe(
res => { this.countries=res;
console("status code--->"+res.status)
},
err=>{
console("status code--->"+err.status)
})
},
发布于 2019-05-19 07:12:42
您可以使用角拦截器在一个地方捕获所有错误,并保持服务整洁。创建一个名为“错误拦截器”的新拦截器,并添加拦截方法:
intercept(request, next) {
// Handle response
return next.handle(request).pipe(
catchError(error => {
//handle specific errors
if (error.status === 401) {
this.handle401();
}
//default case: print, log, toast, etc...
return throwError(error.message || error);
})
);
}
https://stackoverflow.com/questions/50920833
复制相似问题