I는 다음과 같습니다 ErrorHandler를 가지고 : 각도의 ErrorHandler는 AOT 번들에 구성 요소를 포함
@Injectable() export class GlobalErrorHandler implements ErrorHandler {
constructor(private injector: Injector) { }
handleError(error) {
const errorService = this.injector.get(ErrorService);
const location = this.injector.get(LocationStrategy);
const url = location instanceof PathLocationStrategy
? location.path() : '';
StackTrace.fromError(error).then(stackframes => {
const stackString = stackframes
.splice(0, 20)
.map((sf) => {
return sf.toString();
}).join('\n');
const errorObject: IError = {
errorMessage: error.messagen,
stackTrace: stackString,
path: url
};
// Display something to user
errorService.setError(errorObject);
// TODO: send to server
});
// IMPORTANT: Rethrow the error otherwise it gets swallowed
throw error;
}
}
내가 가지고 이것을에서 :
Global error handling angular 2
내 질문에 내가 개발이를 실행하면 예상대로 작동한다는 것입니다 예를 들어
:
구성 요소가 포함되어있는 의미있는 스택 트레이스와ngOnInit()@webpack:///src/app/person/userdetail-page/userdetail-page.component.ts:29:19 __tryOrSetError()@webpack:///~/rxjs/Subscriber.js:247:0 this.__tryOrSetError()@webpack:///~/rxjs/Subscriber.js:187:0 _next()@webpack:///~/rxjs/Subscriber.js:125:0 next()@webpack:///~/rxjs/Subscriber.js:89:0 notifyNext()@webpack:///~/rxjs/operator/switchMap.js:124:0
그러나 때 생산의 각 CLI 사용 : ng build --prod --aot
출력은 동일한 오류입니다입니다
property 'toString' of undefined TypeError: Cannot read property 'toString' of undefined at e._next (http://xxx.azurewebsites.net/main.b21b245638698421733f.bundle.js:1:5701) at e.__tryOrSetError (http://xxx.azurewebsites.net/vendor.1cd9b81fc017fd7eac16.bundle.js:835:16880) at e.next
그래서이 나에게 의미있는 스택 추적이 아니다. 만약 내가 왜 내 개발 환경에서 같은 문제를 일으키는 구성 요소를 얻을 수 ??
프로덕션 사이트의 오류를 어떻게 처리합니까? 만약 내가 내 코드에있는 모든 장소에서 특정 형식의 엉 오류를 던질 수 있지만 catch 블록을 시도 잡으려고 잡으려고했을까요 ??
Stacktrace는 번들에 정의되지 않은 tostring을 표시하지 않고 오류를 담당하는 구성 요소를 항상 표시해야합니다!
으로 오류를 확인하는 동안. 내 프로덕션 빌드에서 잘못되어 가고있는 부분에 대한 더 나은 정보를 얻으려는 나의 접근 방식은 내 자신의 오류 처리기를 각도로 작성한 다음 중요한 구성 요소가있는 구성 요소에 넣는 것이 었습니다. { something ... } catch (예) { setError (예, PersonDecideComponent.name, 'selectionChange'); } 내 오류 처리기에서 구성 요소 이름을 로그 아웃했습니다. och 어떤 메소드에서 예외가 발생했는지 로그 아웃했습니다. 그 해결책에 대해 어떻게 생각해야합니까? – NetProvoke
당신은 aot를 할 때 정확한 오류를 얻을 수 없으며 최선의 방법을 구축하는 것은 catch를 사용하여 서버에 대한 참조를 위해 오류 또는 메서드를 보내어 파일에 로그인하는 것입니다. 그런 다음 해당 참조를 사용하여 디버깅 할 수 있습니다. –