根据我的研究,看起来$ http拦截器已被弃用,所以我不确定目前的最佳做法是什么。如果用户尝试使用已经使用的用户名注册,我将返回409状态,并且我正尝试使用以下内容处理客户端:
$http.post('/register-user',payloadCredentials,config).then(function(response) {
if (response.status == 409) {
$scope.errorResponseUserName = "Username already exists.";
$scope.error = true;
clearPasswords();
clearUsername();
} else {
$rootScope.authenticated = true;
$location.path("/")
}
});
我还是Angular的新手,所以我不确定为什么如果状态代码中断它,这个函数似乎不会运行。我所看到的其他问题适用于过去使用.success()
和.error()
回调的Angular样式,但我没有找到使用较新.then()
语法的任何情况。任何想法都表示赞赏。
答案 0 :(得分:1)
至于所有的承诺,那么()需要两个回调;一个在承诺得到解决时(即在成功的情况下)被召唤,一个被拒绝时(即在出现错误的情况下)。 409状态是错误。所以你(最有可能)需要
$http.post('/register-user',payloadCredentials,config).then(function(response) {
$rootScope.authenticated = true;
$location.path("/")
}, function(response) {
$scope.errorResponseUserName = "Username already exists.";
$scope.error = true;
clearPasswords();
clearUsername();
});
或者您也可以使用catch():
$http.post('/register-user',payloadCredentials,config).then(function(response) {
$rootScope.authenticated = true;
$location.path("/")
}).catch(function(response) {
$scope.errorResponseUserName = "Username already exists.";
$scope.error = true;
clearPasswords();
clearUsername();
});
我不确定你的拦截器被弃用了。 their documentation中没有提及弃用率。但无论如何,拦截器似乎不适合处理这种特定情况。