获取响应代码 401 导致跳过代码块

Getting response code 401 causes skipping code blocks

我正在编写一个离子 v1/express/mongo/node 应用程序。在检查用户是否通过身份验证时,我有以下代码:

checkAuthentication: function(token) {
            console.log(token);
            return $http.get("http://validUrl/test", {
                headers: {
                    'testingAuth': token
                }
            }).then(function(result) {
                return result.data;
            });
        }

我这样称呼它:

checkAuthentication(token).then(function(response) {
            console.log("testing response: " + response);
            // if a valid token is already in storage = response contains "Success"(?), just $state.go to main page, else call the login() function
            if (response.content === "Success") {
                // $state.go main page
            } else {
                console.log("could not log in");
            }
        })

问题是,当我从服务器返回代码 401 时,我以某种方式跳过了 checkAuthentication 函数中的 then 块。执行不会在 "return result.data" 处的断点处停止,或者 "console.log(" 无法记录”)。

我做错了什么吗?我需要做些什么来强制进入那个街区吗?感谢您的任何建议。

问题出在您的错误处理上!我冒昧地修改了您的代码和进行 $http 调用的方式。这是相同的工作plunker

如果您观察到 $scope.login() 函数,我已经注入了服务对象并调用了执行 HTTP call.As 的 checkAuthentication() 函数,您正在为 http 使用 .then调用,angular 提供使用两个函数进行成功和错误回调的规定,当 HTTP 调用失败时,您的 HTTP 错误就会出现。

这是相同的 angular doc

在您的示例中,您没有错误回调方法,因此它不会进入您的 if else 条件。

var app = angular.module("App", []);
app.controller('AppCtrl', ['$rootScope', '$scope', '$http', 'Service', function($rootScope, $scope, $http, Service) {


  $scope.login = function(token) {
  //call the injected service in the function for HTTP call..
    Service.checkAuthentication(token).then(function(response) {
      console.log("testing response: " + response);
      // if a valid token is already in storage = response contains "Success"(?), just $state.go to main page, else call the login() function
      if (response.content === "Success") {
        // $state.go main page
      } 
    },function(error){
      console.log(error);
      console.log("could not log in due to error...");
    });
  };


}]);
//use angular services to do a http call for better code maintainability...
app.service('Service', ['$http', '$rootScope', function($http, $rootScope) {

  return {
    checkAuthentication: function(token) {
      return $http.get("http://validUrl/test", {
        headers: {
          'testingAuth': token
        }
      });
    }
  };
}]);