2017-02-27 2 views
1

J'ai cherché sur Google et débordement de pile sur des problèmes similaires/même même. Mais je suis nouveau à ce qu'aucun d'entre eux ne me donne une idée de comment puis-je réparer mon code.AngularJS 400 mauvaise demande ne pas donner de réponse

Alors, voici mon script:

$http.post('/authlogin', { 
    email: $scope.userdata.email, 
    password: $scope.userdata.password 
}).then(function(response) { 
    console.log(response); 
    if (response.status == 400) { 
     $scope.errormsg = response.data; 
    } 
    if (response.status == 200) { 
     window.location = '/admin'; 
    } 
}); 

Tout fonctionne très bien pour la réponse 200 OK. Mais chaque fois que la connexion a échoué, l'API renvoie 400 Bad Request. À ce moment, l'erreur semble n'appeler même pas la fonction anonyme avec le response. La plupart Cochez pour 400, 200, 201, etc. était & fonctionne parfaitement bien, mais pourquoi pas avec 400.

Voici l'erreur comme indiqué dans la console du navigateur par AngularJS (enjolivé & retirées de données sensibles):

Possibly unhandled rejection: 
{ 
    "data": "Invalid email/password combination.", 
    "status": 400, 
    "config": { 
     "method": "POST", 
     "transformRequest": [null], 
     "transformResponse": [null], 
     "jsonpCallbackParam": "callback", 
     "url": "/authlogin", 
     "data": { 
      "email": "####", 
      "password": "***" 
     }, 
     "headers": { 
      "Accept": "application/json, text/plain, */*", 
      "Content-Type": "application/json;charset=utf-8" 
     } 
    }, 
    "statusText": "Bad Request" 
} 

Je ne suis pas un pro dans angular.js, une explication de ce comportement et de la solution serait appréciée.

Mon objectif est d'afficher un message d'erreur à l'utilisateur qui est retourné dans data.

+0

avez-vous essayé d'ajouter une fonction d'erreur à l'époque? '' .then (fonction() {// fonction de succès}, function() {console.log (arguments); // fonction d'erreur}) ''. alors peut prendre 1 argument pour être fonction (succès seulement) ou 2 arguments pour être fonction (succès et erreur) – mtizziani

+0

Utilisez-vous le formulaire submit pour transmettre vos données au serveur? –

Répondre

2

La promesse retournée par $http est résolue en appelant la première fonction anonyme. Si une promesse est rejetée, la deuxième fonction anonyme est appelée. Cela devrait faire l'affaire.

$http.post('/authlogin', { 
    email: $scope.userdata.email, 
    password: $scope.userdata.password 
}).then(function(successCallback) {  
    if (successCallback.status == 200) { 
     window.location = '/admin'; 
    } 
}, function(errorCallback){ 
    if (errorCallback.status == 400) { 
     $scope.errormsg = errorCallback.data; 
    } 
}); 

Pour plus d'exemples lire le docs

Vous pouvez en savoir plus sur les promesses here

+0

OMG, @digijap vous avez sauvé ma journée! Merci pour l'explication de ce comportement. –