【问题标题】:Angular avoid Console trace on $http error [duplicate]Angular避免$ http错误上的控制台跟踪[重复]
【发布时间】:2014-08-04 02:53:57
【问题描述】:

在我的应用程序中,我使用 REST api 来获取我的数据。 如果发送这样的请求

$http.get('api/entity/' + $scope.entityId).success(/* DO STUFF */).error(/* DO STUFF */)

在服务中,如果 entityId 不存在,我会返回 404。 在错误函数中,我使用状态(第二个参数)捕获它并以适当的方式对其进行处理。

如果抛出异常并污染 javascript 控制台,我对 angular 感到恼火。它似乎发生在 Angular.js:8165

有什么方法可以告诉 Angular 我是一名成熟的开发人员,我会以一种很好的方式自己处理他认为的错误?

换句话说,我可以告诉 Angular 不要输出那些废话吗?

谢谢,

【问题讨论】:

标签: javascript angularjs rest


【解决方案1】:

我没有为此添加真正的“编码”解决方案,因为 Philipp 提供了正确的答案,但我想发布一个关于“解决方法”的想法

如果您真的想避免这种情况,解决方案就是让所有状态码大于或等于 400 的响应作为已处理响应(例如:无效凭据、电子邮件存在、无效开始date, ... 等等),所以它们都表现得像成功一样,状态返回 200,您可以在响应头或正文中添加另一个属性,如 secondaryStatusCode=400errorCode=400,然后在成功函数中前端,你试试看这个,如果你有errorCode,那么即使状态码是200也是一个错误。

我知道这是一个丑陋的解决方案,但如果您确实需要找到解决方法,您可以使用这种方式。

【讨论】:

  • 感谢您的回复,但正如您所说,这更像是一种解决方法,并且我构建的 API 需要保持“干净”以供客户直接使用(无需前端)
  • 顺便说一句,我不会称其为丑陋的,这是有目的的,我已经看到大量使用这种技术的服务和网站。就我自己而言,我宁愿不这样做,而是尽可能地坚持休息……
  • 所以我是,而且我认为很多项目都使用这种“丑陋”的解决方案,如果真的是这样的话。而且我知道答案可能为时已晚,但我只想为正在寻找此类问题答案的社区添加此内容。
  • 如果您想避免在客户端处理的错误污染控制台,这是我发现的唯一方法。我同意应该有更优雅的方式。
【解决方案2】:

这是您浏览器的功能,而不是 AngularJS 的一部分,它执行日志记录。这是此页面控制台中的示例:

您可以看到它记录了与您在问题评论中链接的完全相同的错误消息,并且确实是 pointing to a part in the source code,但我没有添加任何日志记录语句。

您可以做的最好的事情是关注this answer 并向控制台添加过滤器。

【讨论】:

  • 太好了,谢谢你的回答!
  • 如果您想避免污染所有用户的控制台,而不仅仅是您自己,这不是一个解决方案。这个问题很好。我希望服务器在出现错误的情况下抛出异常,我希望客户端在不污染控制台的情况下处理它。
  • 虽然浏览器(在我的例子中是 Chrome 和 Opera)确实会记录“网络错误”,但您可以通过简单地选中控制台过滤器中的“隐藏网络”复选框来隐藏它。但是,正如原始问题所述,AngularJS 也记录了错误。我也希望停止。
  • @JeffreyA.Gochin 这个答案是 3 岁。如果 AngularJS 现在也默认记录网络错误,您能否在其中发布包含您的解决方案的新答案?
猜你喜欢
  • 1970-01-01
  • 2011-06-10
  • 2022-12-23
  • 2019-12-18
  • 2017-06-15
  • 1970-01-01
  • 2012-11-09
  • 2021-12-12
相关资源
最近更新 更多