我使用的是非常基本的angularJS代碼一個用戶登錄這樣的:AngularJS承諾抓401
[...]
this.login = function(email, password) {
promise = $http.post('/login',
{
'email': email,
'password': password
});
promise.then(function(response){
console.log("success");
}).catch(function(response){
console.log("catch");
}).finally(function(response){
console.log("finally");
});
return promise;
};
[...]
當REST API生成代碼爲200的響應,則客戶端控制檯將記錄success finally
和用戶已登錄。
當服務器使用403或500代碼生成響應時,控制檯將打印出catch finally
。
但是,當響應將與401,角沒有打印出任何東西。控制檯將保持爲空,只有POST http://127.0.0.1/login 401 (Unauthorized)
提示。但沒有success
或catch
作爲輸出。也沒有finally
。
在我的項目中,403將在全球範圍內以$rootScope.$on('event:auth-forbidden', function(r) {...});
捕獲。這就是爲什麼REST服務器只會在找不到東西時才拋出404,當用戶沒有權限和/或未登錄時403,以及僅當登錄失敗時纔會拋出401。
那麼我怎樣才能在$http
上找到401?
是不是.then
承諾只爲返回200和.catch
爲每隔一個返回!= 200?
我使用angularJS v1.6.4和angular-http-auth v1.5.0。
我認爲這篇老文章是一個很好的參考。您可以鏈接.success .error instad然後。要不然。你可以使用。然後檢查響應對象,它應該有一個狀態代碼屬性,指示你是否應該拒絕或解決承諾https://weblog.west-wind.com/posts/2014/Oct/24/AngularJs-and- Promises-with-the-http-Service – Tim
你使用'angular-http-auth'模塊嗎? – alexmac
...或者有任何全球'$ http'攔截器註冊? – Phil