2014-03-01 75 views
14

我想弄清楚如何在我的應用中抑制http請求和響應錯誤,例如,當對我的服務器發出錯誤的請求時,我不想錯誤登錄到瀏覽器控制檯。我嘗試覆蓋$exceptionHandler,但該邏輯適用於除HTTP錯誤外的所有異常,這些異常仍會記錄到瀏覽器。我還創建了HTTP攔截器,但我已經把我的responseError邏輯之前出現的全球400 Bad Request錯誤:防止在瀏覽器控制檯中記錄http錯誤

'responseError': function (rejection) { 
console.log(rejection); 
return $q.reject(); 
} 

以不抑制錯誤要麼,任何想法?

編輯

我得到的錯誤是這樣的: POST http://localhost:38349/token 400 (Bad Request) enter image description here

+0

你能複製你想擺脫的日誌輸出嗎? – Alp

+0

@Alp見我的編輯。 –

回答

11

其實Angular不記錄這個。

這是執行該操作的XMLHttpRequest對象(與JQuery相同的問題here)。我從角提取的邏輯並提出a working standalone example

var method = 'POST'; 
var url404 = '/tnseiartneiasrt/arsntiearsntiasrntiarnstsie'; 

var xhr = new window.XMLHttpRequest(); 
xhr.open(method, url404, true); 
xhr.onreadystatechange = function() { 
    if (xhr && xhr.readyState == 4) { 
    console.log('should have logged an error already :('); 
    } 
}; 
xhr.send(null); 

正如你所看到的,這是XHR對象,記錄它。有可能是觸發XHR請求之前,禁止所有的console.log的方式,但我認爲這是更好要麼

  • 重新設計你的錯誤流返回與體內
  • 內部錯誤代碼內嵌的200狀態碼
  • 直播與控制檯記錄(一般用戶甚至不知道有關控制檯反正)

我選擇了第二個選項,因爲我認爲這是比較容易理解,因爲它不需要額外的邏輯,當有人讀你的代碼。

希望這有助於:)

2

您的瀏覽器來決定記錄日誌壞請求日誌,它是做正確的事。如果您不希望這樣做,請不要發送該請求或從您的Web服務器發送另一個響應代碼。

+1

Angular明確記錄了這一點。 – rightfold

+0

你錯過了這一點。我想知道我是否可以訪問網絡服務器。如果我可以 - 太棒了!如果不是 - 很好,我只想知道。不發出請求不是一個解決方案 - 我沒有得到我的答案。從我的網絡服務器發送另一個響應代碼不是一個解決方案,如果我不能到達它(重複 - 不是一個錯誤,我只是想知道)。 – DavidWalley

+0

從瀏覽器的角度來看,請求是應該在特定的時間窗口中得到響應的東西。如果達到超時並且沒有響應,瀏覽器會決定記錄一個錯誤,因爲這是意外的行爲。 因此,如果您希望爲您的網絡應用程序提供類似離線模式的功能,則需要注意無法避免瀏覽器控制檯中的404錯誤。這沒什麼不好,你爲什麼要隱藏這些? – Alp

相關問題