首页 > 解决方案 > Angular 6/7 - 在服务中获取整个 http 响应状态

问题描述

我在 Angular 7 中有以下服务:

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

@Injectable()
export class UserService {

  private currentUserSubject: BehaviorSubject<any>;

  constructor(
    private http: HttpClient
  ) {
    this.currentUserSubject = new BehaviorSubject(null);
  }

  public get currentUserValue(): any {
    return this.currentUserSubject.value;
  }

  login(entity: any, inputUsername: any, inputPassword: any): any {

    const httpOptions = {
      headers: new HttpHeaders({
        username: inputUsername,
        password: inputPassword
      })
    };

    return this.http.get(entity.url, httpOptions)
    .pipe(map((user: Response) => {
      console.log(user);
      console.log(user.status);

      if (user) {
          this.currentUserSubject.next(user);
      }
      return user;
  }));
  }
}

我想获取响应状态(200、401 等)。如果我尝试订阅诸如 .pipe(map(.....)).subscribe(...) 之类的订阅,则会收到错误消息,即订阅不是函数。

此外,我在 pipe(map()) 中只得到 200 个状态响应。我在这里没有收到其他状态代码的响应。

我想根据收到的状态更新 BehaviorSubject。

如何获取服务中的所有响应及其状态?

我已经通过Angular 6 Get response headers with httpclient issue完成了,但这不适用于这里。

我添加了observe: 'response' 到http 标头,但它没有任何区别。

const httpOptions = {
      headers: new HttpHeaders({
        username: inputUsername,
        password: inputPassword,
        observe: 'response',
      }),
    };

标签: angularangular-httpclient

解决方案


我就是这样做的:

this.http.get(this.url, { observe: 'response' })
  .subscribe(response => console.log(response.status));

使用 Angular HttpClient 并订阅从http.get.


推荐阅读