【问题标题】:Using StackTrace.js with Angular.js将 StackTrace.js 与 Angular.js 一起使用
【发布时间】:2016-11-15 01:10:19
【问题描述】:

我正在为我的整个MEAN.js 项目实现一个记录器。我有一个运行良好的服务器端记录器,并且我设置了一个端点来接收一个带有异常的 POST 请求来记录客户端错误。我正在使用StackTrace.js 进行客户端错误记录,但我遇到了一些错误;现在我正在使用 StackTrace 的错误堆栈解析器,但仍然出现错误。我在 Angular 的 $exceptionHandler 上使用装饰器来实现这一点:

$provide.decorator("$exceptionHandler",
    function($delegate, traceService, $log, $window) {
  return function(exception, cause) {
    $delegate(exception, cause);
    try {
      var errorMessage = exception.toString();
      var stackTrace = traceService.
      parse(exception).
      then(function(stackFrames) {
        $.ajax({
          type: 'POST',
          url: '/logger',
          contentType: 'application/json',
          data: angular.toJson({
            url: $window.location.href,
            message: errorMessage,
            type: 'exception',
            stackFrace: stackFrames,
            cause: cause || ''
          })
        }).fail(function() {
          $log.warn('POST request failed');
        });
      }).catch(function(error) {
        $log.warn('Error StackTrace');
      });
    } catch (loggingError) {
      $log.warn('Error server-side logging failed');
      $log.log(loggingError);
    }
  };
});

traceService 是一个 Angular 服务,它充当 StackTrace/error-stack-parser 函数的代理。 traceService.parse 等价于 ErrorStackParser.parsetraceService 实现为:

angular.module('core').factory('traceService', function() {
  return {
    parse: ErrorStackParser.parse
  };
});

我已将此装饰器代码放在 Angular 应用引导程序上,并且我正在通过在控制器上抛出错误来进行测试。当我运行应用程序时,我在客户端控制台上收到此错误:

Error server-side logging failed
angular.js:13708 TypeError: this.parseV8OrIE is not a function
at Object.ErrorStackParser$$parse [as parse] (error-stack-parser.js:70)
at application.js:22
at invokeLinkFn (angular.js:9816)
at nodeLinkFn (angular.js:9215)
at compositeLinkFn (angular.js:8510)
at publicLinkFn (angular.js:8390)
at lazyCompilation (angular.js:8728)
at updateView (viewDirective.ts:278)
at Object.configUpdatedCallback [as configUpdated] (viewDirective.ts:226)
at configureUiView (view.ts:164)

这似乎是错误堆栈解析的问题;我似乎找不到任何关于这个问题的文章,所以我确定这是我做错了,我正在测试的方式或其他东西。任何人都可以提供一些关于为什么失败的见解吗?

编辑

我根据 Caramiriel 的评论修改了代码。似乎我需要将 error-stack-parser 中的所有功能添加到我的服务中。这是traceService

angular.module('core').factory('traceService', function() {
  return {
    parse: ErrorStackParser.parse,
    parseV8OrIE: ErrorStackParser.parseV8OrIE,
    extractLocation: ErrorStackParser.extractLocation
  };
});

现在我收到此错误:

TypeError: StackFrame is not a constructor
at Object.<anonymous> (http://localhost:3000/lib/error-stack-parser/error-stack-parser.js:105:24)
at Array.map (native)
at _map (http://localhost:3000/lib/error-stack-parser/error-stack-parser.js:22:26)
at Object.ErrorStackParser$$parseV8OrIE [as parseV8OrIE] (http://localhost:3000/lib/error-stack-parser/error-stack-parser.js:95:20)
at Object.ErrorStackParser$$parse [as parse] (http://localhost:3000/lib/error-stack-parser/error-stack-parser.js:70:29)
at http://localhost:3000/application.js:22:11
at invokeLinkFn (http://localhost:3000/lib/angular/angular.js:9816:9)
at nodeLinkFn (http://localhost:3000/lib/angular/angular.js:9215:11)
at compositeLinkFn (http://localhost:3000/lib/angular/angular.js:8510:13)
at publicLinkFn (http://localhost:3000/lib/angular/angular.js:8390:30)

【问题讨论】:

  • traceService.parse 是如何实现的?不知何故,您是原始上下文 (this),但不清楚您提供的代码的原因。您可能必须 .bind 原始对象。
  • 我已编辑问题以添加信息。我还更改了traceService 代码,现在我遇到了另一个错误。
  • .factory('traceService', function() { return({ parse: ErrorStackParser.parse, extractLocation: ErrorStackParser.extractLocation, parseV8OrIE: ErrorStackParser.parseV8OrIE, parseFFOrSafari: ErrorStackParser.parseFFOrSafari, parseOpera: ErrorStackParser。 parseOpera, parseOpera9: ErrorStackParser.parseOpera9, parseOpera10: ErrorStackParser.parseOpera10, parseOpera11: ErrorStackParser.parseOpera11 }); })

标签: javascript angularjs logging stacktrace.js


【解决方案1】:

看起来您使用的 error-stack-parser 不依赖于 stackframe 项目。

如果您使用 npm 或 bower,您将自动获得该依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多