我正在尝试使用服务器级日志记录创建一个AngularJs应用程序,用于例外。
我的代码:
exceptionHandler.js
app.config(function($provide){
$provide.decorator("$exceptionHandler", function($injector,$log, ExceptionModel, exceptionService){
return function(exception, cause){
//$log.error.apply( $log, arguments );
var exceptionModel = new ExceptionModel();
exceptionModel.Exception = "Exception";
exceptionModel.Cause = "Cause";
exceptionModel.StackTrace = "StackTrace";
exceptionService.LogException(exceptionModel).
catch(function(){ // do nothing});
};
});
});
exceptionService.js
app.service("exceptionService", function ($injector) {
var _logException = function (exception) {
var $httpResource = $injector.get("$resource");
return $httpResource(url, {}).post(exception).$promise;
}
this.LogException = _logException
});
只要上面的异常日志记录API不可用(404错误),AngularJs exceptionHandling就会进入无限循环。我有什么遗失的吗?
有没有办法可以抑制AngularJs中的错误,即$ exceptionHandler如果在将错误发送到Server API时出错或者在任何层处理错误时都不会引发异常。
答案 0 :(得分:0)
首先,您不需要为您的服务注入$ injector,您应该能够简单地注入$ resource。我还建议您使用工厂代替您的例外服务,但您所拥有的工作将会有效。
如果遇到无限循环,返回的方法必须在执行期间抛出一个错误,然后调用异常处理程序,抛出错误,依此类推。
如果在帖子中出现问题,则不会导致抛出错误。问题可能出在ExceptionModel的构造函数中。
我注意到exceptionService中的变量url没有在任何地方定义,这可能会引发错误,除非为清楚起见省略了该部分代码。
此外,$ resource不提供post方法,它来自$ http。在您的示例中,您似乎应该从$ resource切换到$ http,因为您没有将其用作资源:
app.service("exceptionService", function ($http) {
var _logException = function (exception) {
return $http.post(url, exception);
}
this.LogException = _logException;
});