Wprowadzam program rejestrujący dla całego mojego projektu MEAN.js
. Mam program rejestrujący po stronie serwera, który działa dobrze i ustawiłem punkt końcowy, aby odebrać żądanie POST z wyjątkiem, aby zarejestrować błąd klienta. Używam StackTrace.js
do rejestrowania błędów po stronie klienta, ale dostaję błędy; teraz używam programu StackTrace do parowania stosów błędów i wciąż dostaję błędy. Używam dekorator na kątowym za $ exceptionHandler do osiągnięcia tego celu:Używanie StackTrace.js z Angular.js
$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
jest kątowym serwis, który działa jako serwer proxy dla StackTrace funkcji/error-stack-parsera. traceService.parse
jest odpowiednikiem ErrorStackParser.parse
. traceService
jest zaimplementowany jako:
angular.module('core').factory('traceService', function() {
return {
parse: ErrorStackParser.parse
};
});
Włożyłam ten kod dekorator na Kątowymi aplikacji bootstrap, a ja testowania przez rzucanie błąd na kontrolerze. Kiedy uruchomić aplikację otrzymuję ten błąd na konsoli klienta:
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)
Wydawałoby się, jak to jest problem z błędu stosu-parse; Nie mogę znaleźć żadnych artykułów dotyczących tego problemu, więc jestem pewien, że jest to coś, co robię źle, sposób, w jaki testuję lub coś innego. Czy ktokolwiek może podać wgląd w przyczyny niepowodzenia?
Edit
I zmodyfikowany kod następujący komentarz Caramiriel użytkownika. Wygląda na to, że muszę dodać wszystkie funkcje z parsera błędów do mojej usługi. To traceService
:
angular.module('core').factory('traceService', function() {
return {
parse: ErrorStackParser.parse,
parseV8OrIE: ErrorStackParser.parseV8OrIE,
extractLocation: ErrorStackParser.extractLocation
};
});
Teraz dostaję ten błąd:
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)
W jaki sposób zaimplementowano 'traceService.parse'? W pewnym sensie jesteś oryginalnym kontekstem ("ten"), ale nie wiesz, dlaczego z podanym przez Ciebie kodem. Być może będziesz musiał ".indy" oryginalny obiekt. – Caramiriel
Edytowałem pytanie, aby dodać informacje. Zmieniłem również kod 'traceService' i teraz otrzymuję inny błąd. –
Fabryce umiejscowionej ('traceService', funkcja() { \t zwrotny ({ \t analizy składniowej: ErrorStackParser.parse, \t \t extractLocation: ErrorStackParser.extractLocation, \t \t parseV8OrIE: ErrorStackParser.parseV8OrIE, \t \t parseFFOrSafari: ErrorStackParser. parseFFOrSafari, \t \t parseOpera: ErrorStackParser.parseOpera, \t \t parseOpera9: ErrorStackParser.parseOpera9, \t \t parseO pera10: ErrorStackParser.parseOpera10, \t \t parseOpera11: ErrorStackParser.parseOpera11 \t}); \t \t}) –