從角文檔上攔截器爲request
方法:
request: interceptors get called with a http config object. The function is free to modify the config object or create a new one. The function needs to return the config object directly, or a promise containing the config or a new config object.
文檔的其餘部分,可以發現here。從這裏你可以看到這個方法也可以返回一個promise(這實際上非常棒),所以你總是可以拒絕它。
嘗試這樣:
prism.service('APIInterceptor', function($q, $rootScope) {
this.request = function(config) {
if(/*config is not valid*/) {
return $q.reject({message: 'ERROR, ERROR... INTRUDER ALERT!', status: 401, config: config});
} else {
return config;
}
};
});
,看看它是如何被處理的(我不知道你的應用程序會做什麼)。讓我知道它是否適合你!
編輯:我的答案已被接受,但不完整,如果我沒有完成,它會永遠困擾我。所以,在編寫我自己的一些測試代碼之後,我意識到在這種情況下你可以做1件事。首先是處理在攔截未授權請求:
...
this.request = function(config) {
if(/* config is not authorized */) {
// Do something here like redirect/issue another request... whatever
return $q.reject({/*whatever the hell you want*/});
} else ...
};
...
如果要處理所有未授權的請求相同的,這顯然效果最好。但是,如果您不這樣做,第二種選擇是推遲發出請求的服務。例如,如果你使用$http
你可以這樣做:
$http.get('/words/words/words/').then(function(){
// This is where you handle a successful request.
}, function(error) {
// Handle your error here. Please take note that this error message is
// whatever you sent back in the `reject` previously
});
希望這清除了一些東西了。
'return null;'可能會這樣做。 – CollinD
是的,它不會去數據,但在控制檯它說:TypeError:無法讀取屬性'標題'null – Mark
嘗試打印出配置對象,看看裏面有什麼方法和領域。如果您不能徹底取消XHR請求的啓動,也許您可以將其指向無效的URL。這仍然會拋出404,但它不應該破壞任何東西。 – CollinD