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!
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.
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>
Voici comment je l'ai fait:
checkResponse() {
this.http.get(this.url, { observe: 'response' })
.subscribe(response => console.log(response.status));
}
Utilisation de Angular 7.
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
}
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}`);
}
}
);
}
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.