Je fais une demande Http
en Angular 4
en utilisant sa classe HttpClient
intégrée. Tout fonctionne bien, mais il y a un petit problème avec la variable d'erreur retournée.Angular4 - Http error retourné est une chaîne au lieu d'un objet
Quand je post
la mauvaise combinaison nom d'utilisateur/mot de passe pour se connecter à l'utilisateur, l'objet d'erreur retourné contient une error
clé dont la valeur devrait être un Object
mais je suis obtenir un string
à la place. S'il vous plaît voir ci-dessous le texte entre ** dans l'objet de comprendre ce qui est de la question:
{**error: "{"non_field_errors":["Unable to login with provided credentials."]}"**, headers: Object, status: 400, statusText: "Bad Request", url: "http://mymedicine.loc/api/auth/login/", ok: false, name: "HttpErrorResponse", message: "Http failure response for http://project.loc/api/auth/login/: 400 Bad Request"}
Ce qui pourrait causer ce genre de problème? J'ai besoin d'avoir un objet là juste pour que je puisse informer l'utilisateur de ce qui s'est passé pendant l'authentification. Je dois préciser que l'authentification fonctionne bien lorsque les informations d'identification correctes sont fournies et que j'ai activé CORS
sur le serveur Web auquel j'envoie la demande HTTP
.
Voici un petit morceau de code extrait qui fait la demande POST
http:
interface ErrorMessage {
username: string[1];
password: string[1];
non_field_errors: string[1];
}
interface ErrorResponse {
error: ErrorMessage;
}
// get token from the server
this.http.post<TokenResponse>('http://myproject.loc/api/auth/login/', body).subscribe(
(res: TokenResponse) => {
// login with token
this.auth.login(res.auth_token);
// redirect
this.router.navigateByUrl('/url');
},
(err: ErrorResponse) => {
let error = err.error;
console.dir(err);
}
);
le json sur l'objet d'erreur est formaté comme une chaîne, pas un objet. Contrôlez-vous le serveur? Si c'est le cas, corrigez-le en vous débarrassant des guillemets autour de votre objet d'erreur. sinon, analysez la réponse avec JSON.parse – bryan60
Jetez un coup d'œil par ex. https://github.com/angular/angular/issues/18682 – jonrsharpe
@ bryan60 Oui, j'ai le contrôle sur les données retournées par le serveur, mais je ne pense pas que le problème vient de là parce que la réponse retournée par 'curl' sur la ligne de commande est bien (par exemple un objet json) – h4k1m