【问题标题】:How to display result headers in a get request in angular 6如何在角度 6 的获取请求中显示结果标头
【发布时间】:2018-12-17 04:38:26
【问题描述】:

我无法在获取请求的结果中显示标题。

import { Injectable } from '@angular/core';
import {HttpClient, HttpHeaders} from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class ApisService {
  link = 'http://13.233.34.68:3000/api/';
  xToken = 'nil';

  constructor(private http: HttpClient) { }
  getToken() {
    if (this.xToken === 'nil') {
      const header1 = new HttpHeaders({'username': 'angular', 'password': '123456'});
      this.http.get(this.link + 'get-token', {headers: header1})
        .subscribe(
          (result) => {
            console.log(result['headers']);
          }
        );
    }
  }
}

我在控制台中得到的结果显示“未定义”。 请帮忙。

编辑: 使用时

    this.http.get(this.link + 'get-token', {observe: 'response', headers: header1})
    .subscribe(
  (result) => {
    console.log('header keys:', result.headers.keys());
    console.log('header X-ABC:', result.headers.get('X-ABC'));
    console.log(result.body);
}

我在控制台中得到输出

header keys: 
Array(4) [ "cache-control", "content-type", "expires", "pragma" ]
apis.service.ts:18:12
header X-ABC: null apis.service.ts:19:12
Object { success: true }

【问题讨论】:

  • 结果是一个对象。 Object { success: true } 但这是我需要的头文件。

标签: angular get


【解决方案1】:

在选项中,添加observe: 'response',那么您的返回类型将为Observable<HttpResponse<T>>。最近的角度,默认返回Observable<T>(即observe?: 'body')。

有了HttpResponse<T>,你就可以访问响应对象了。

this.http.get(this.link + 'get-token', {observe: 'response', headers: header1})
    .subscribe(
      (result) => {
        console.log('header keys:', result.headers.keys());
        console.log('header X-ABC:', result.headers.get('X-ABC'));
        console.log(result.body);
      }
    );

Angular 会自动尝试检测 body 的类型。这也可以通过responseType 选项控制。

responsebody 的替代品是observe: 'events',它会返回Observable<HttpEvent<T>>。然后,您将从HttpClient 获得可用的事件。事件是:

type HttpEvent<T> = HttpSentEvent | HttpHeaderResponse | HttpResponse<T> | HttpProgressEvent | HttpUserEvent<T>

参考documentation

【讨论】:

  • 我使用这种方法得到的标题不是我应该得到的。在这里我得到了lazyInit,normalizednames。但我期待响应标头中有一个 x-api-token。
  • 如前所述,为了访问标头,您必须从HttpClient 接收HttpResponse&lt;T&gt;。为此,您必须使用observe: 'response' 在请求选项中明确指定它。否则,您将仅获得由 Angular 确定的响应内容,例如 jsontext 等。
  • 是的,我添加了 observe: 'response' 来获取头文件。但这些不是我期待的头文件
  • 例如使用 Chrome 开发工具检查您的网络请求,并检查 HTTP 响应中收到的标头是否与上面示例中使用 console.log(response.headers) 打印的相同。如果您在两者中都没有看到预期的标头,则可能是您的请求和/或后端有问题。
  • 当我使用 Postman 发送相同的请求时,我得到了所有预期的标头。浏览器中的网络请求还显示了我需要的所有标头。但我没有得到那些有角度的标题。请帮忙:(
猜你喜欢
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多