【问题标题】:Angular httpClient get headers if an error occurred如果发生错误,Angular httpClient 获取标头
【发布时间】:2018-11-15 16:23:19
【问题描述】:

我尝试了以下代码,但没有定义 headers 属性。如果http响应状态不是2xx,还有其他方法可以访问http头吗?

this._httpClient.get(url)

      .subscribe(
        (res: any) => {
          //sth
        },
        error => {
          this._logger.error(..., error.headers.get('Some-important-header'));

        }
      );

【问题讨论】:

    标签: angular angular-httpclient


    【解决方案1】:

    响应正文不会返回您可能需要的所有数据。有时服务器会返回特殊的标头或状态代码,以指示对应用程序工作流很重要的某些条件。

    使用观察选项告诉 HttpClient 你想要完整的响应:

    this.httpClient.get(url, { observe: "response" }).subscribe(
                (res: any) => {
                  //sth
                },
                error => {
                  this._logger.error(..., error.headers.get('Some-important-header'));
    
                }
              );
    

    希望对您有所帮助!

    【讨论】:

    • 这会返回一个订阅,而不是 observable。
    • 你可以从订阅中返回一个 observable。 stackoverflow.com/questions/49630371/…
    • 不,你不能。如果您阅读了您提供的问题,您会发现它不是真的:这个人创建了一个可观察对象,并通过订阅向该流发送一个值。订阅不会返回任何内容,因为它根本无法返回。
    • 当我添加 { observe: "response" }
    【解决方案2】:

    试试这样的

    this._httpClient.get(url).pipe(tap(event  => {
       if(event instanceof HttpResponse){
          console.log(event.headers);
       }
    }), catchError(this.handleError));
    

    处理错误

    private handleError(error: HttpErrorResponse) {
        if (error instanceof HttpErrorResponse) {
          console.log(error.headers);
        } 
      };
    

    收到回复后请阅读 - 希望这会有所帮助 - 编码愉快 :)

    【讨论】:

      猜你喜欢
      • 2019-03-04
      • 2018-01-26
      • 1970-01-01
      • 2018-07-31
      • 2018-01-12
      • 2018-02-04
      • 1970-01-01
      • 2019-12-21
      相关资源
      最近更新 更多