web-dev-qa-db-fra.com

Obtenir le code d'état http.get response angular2

J'ai besoin d'obtenir le code d'état de l'appel http suivant et de le renvoyer sous forme de chaîne

//This method must return the status of the http response
confirmEmail(mailToken):Observable<String>{

     return this.http.get(this.baseUrl+"users/activate?mailToken="+mailToken)
                     .map(this.extractData)
                     .catch(this.handleError);

}

tHX!

10
Maurizio Rizzo

Ajout d'une réponse pour les versions de Angular> = 4.3 (dont 8) avec un nouveau HttpClient qui remplace http

import {HttpClientModule} from '@angular/common/http'; // Notice it is imported from @angular/common/http instead of @angular/http

Comment obtenir le code de réponse ou tout autre en-tête:

http.get(
   `${this.baseUrl}users/activate?mailToken=${mailToken}`,
    {observe: 'response'}
)
  .subscribe(response => {

    // You can access status:
    console.log(response.status);

    // Or any other header:
    console.log(response.headers.get('X-Custom-Header'));
  });

Comme indiqué dans le commentaire de @Rbk,

L'objet {observe: 'response'} est ce qui rend l'objet de réponse complet disponible.

Vérifier la documentation

19
FRECIA

Modifiez simplement votre code comme suit pour stocker votre responseStatus dans un champ:

responseStatus: number;

//This method must return the status of the http response
confirmEmail(mailToken):Observable<String> {
//Edited for working with HttpClient on Angular >= 4.3
  return this.http.get(this.baseUrl+"users/activate?mailToken="+mailToken, {observe: 'response'})
                 .map((response: Response) => {
                   this.responseStatus = response.status;
                   return this.extractData(response);
                 }
                 .catch(this.handleError);

}

Et puis affichez-le dans le modèle HTML de votre composant:

<p class='responseStatus'>{{responseStatus}}</p>
8
Karbos 538

Voici comment je l'ai fait:

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

Utilisation de Angular 7.

4
tomfl

C'est simple !!

À l'intérieur de votre fonction extractData

extractData (res){
//res.status  will be your status code
// res.statusText  will be your status Text
}
3
CharanRoot

Si vous avez des paramètres de requête et d'autres options, vous devez ajouter

{ observe: 'response', params: new HttpParams() } 

à votre méthode . get, .post, .patch etc comme deuxième argument. Ensuite, vous pouvez y accéder via le callback response.status. Notez que si vous êtes comme moi et que vous deviez le faire, placez vos options de paramètres dans le même tableau.

create(resource: Resource, query?: Query): Observable<Resource> {
  return this._httpClient
    .post(`${this._apiUrl}${this._endpoint}`, this._serializer.toJson(resource), {
      params: query ? new HttpParams({ fromObject: query.toOData() }) : null,
      observe: 'response'
    })
    .map(
      (response): Resource => {
        this.handleStatusCode(response.status);
        try {
          return this._serializer.fromJson(response);
        } catch (err) {
          throw new Error(`Error parsing resource. Details: ${err}`);
        }
      }
    );
}
0
Nick Gallimore
    confirmEmail(mailToken):Observable<String> {
   return this.http.get(this.baseUrl+"users/activate?mailToken="+mailToken)
     .pipe(map(data => {
       return data.httpStatus
         }));
     .catch(this.handleError);
}

J'espère que cela résoudra votre problème.

0
RajuPedda