我正在编写离子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(”无法记录“)的断点处停止。
我做错了什么吗?我是否需要做些什么才能强行进入该区块?谢谢你的任何建议。
答案 0 :(得分:0)
问题在于你的错误处理!我冒昧地修改你的代码以及进行$ http调用的方式。以下是相同的工作plunker。
如果您观察$scope.login()
函数,我已注入服务对象并调用执行HTTP调用的checkAuthentication()
函数。当您使用.then
进行http调用时, angular提供了使用两个函数进行成功和错误回调的方法,当HTTP调用失败时,HTTP错误就会发生。
以下是角度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
}
});
}
};
}]);