获取响应代码 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
}
});
}
};
}]);
我正在编写一个离子 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
}
});
}
};
}]);