在FlatMap中访问响应标头angular 7

时间:2019-06-18 18:40:29

标签: angular

我尝试访问flatMap中的响应标头

this.http.post<HttpResponse<any>>(`${environment.URL_API}/patients/v1/`, patient, {observe: 'response'}).pipe(
  flatMap((res: any) => {
    console.log(res)
    var location = res.headers.get('Location'); //location = null
    console.log("service", location)
    return this.find(location);
  }),
  map(a => {
    return a
  }));

但是res.headers.get('Location')未定义

enter image description here

Chrome控制台中有一个标题

1 个答案:

答案 0 :(得分:1)

解决方案是在后端添加Access-Control-Expose-Headers

header("Access-Control-Allow-Methods: ... ");
header("Access-Control-Allow-Headers: ... ");
header("Access-Control-Expose-Headers: X-Custom-header");
header("X-Custom-header: $some data");

然后在前端工作正常:

this.httpClientObject.get(url).toPromise()
            .then(res => {
                let data = res.headers.get('X-Custom-header');
                console.log(data);
            })

确实,这不是Angular问题。是API问题。带有标题

'access-control-expose-headers' : 'name-of-expose-header'

工作正常。

问题是,这不适用于标题

'access-control-expose-headers' : '*'

您不能使用*,而必须明确显示要公开的标题的名称。

请参见access-control-expose-headers问题