首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得角4中的HttpClient状态码

如何获得角4中的HttpClient状态码
EN

Stack Overflow用户
提问于 2018-06-19 04:50:46
回答 3查看 44.5K关注 0票数 10

我遇到了获取HTTP状态代码的问题,在HTTP中,我可以很容易地使用response.status,获得响应代码,但是当我使用HttpClient模块时,我无法获得response.status,它显示出找不到状态。

因此,如何使用response.status中的HttpClient模块获得Angular 4&5。请帮帮忙。

餐厅供应:-

代码语言:javascript
运行
复制
@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:

代码语言:javascript
运行
复制
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)
    })

  }
}
EN

回答 3

Stack Overflow用户

发布于 2018-06-19 04:56:43

要获得完整的响应,需要在响应中添加额外的属性,即observe -

代码语言:javascript
运行
复制
getCountries(): Observable<{}> {
    return this.http.get(this.apiUrl, {observe: 'response'}).pipe(
      map(this.extractData),
      catchError(this.handleError)
    );
  }

想了解更多信息,你可以参考-

票数 9
EN

Stack Overflow用户

发布于 2018-06-19 12:55:17

observe : 'response'添加到http.get方法的头选项中,如

代码语言:javascript
运行
复制
getCountries(): Observable<{}> {
    return this.http.get(this.apiUrl,{observe : 'response'}).pipe(
      map(this.extractData),
      catchError(this.handleError)
    );
  }

订阅get()方法,以获得您想要的响应状态,就像您所做的那样

代码语言:javascript
运行
复制
 getCountries() {
this.rest.getCountries().subscribe(
    res => {  this.countries=res;
  console("status code--->"+res.status)
},
err=>{
  console("status code--->"+err.status)
})
          },
票数 6
EN

Stack Overflow用户

发布于 2019-05-19 07:12:42

您可以使用角拦截器在一个地方捕获所有错误,并保持服务整洁。创建一个名为“错误拦截器”的新拦截器,并添加拦截方法:

代码语言:javascript
运行
复制
  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);
      })
    );
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50920833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档