2014-03-01 59 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

相关问题