Javascript 充实捕获的错误并在angular/typescript中重新显示

Javascript 充实捕获的错误并在angular/typescript中重新显示,javascript,angular,typescript,error-handling,Javascript,Angular,Typescript,Error Handling,我是新的前端开发-我曾经是后端只有在过去几年。我正在尝试删除帮助程序中的错误消音器,并用更多信息重新显示被吞没的错误。在自定义ErrorHandler中,我将捕获错误端并将信息发送到后端服务。我不知道如何以正确的方式做这件事。 投掷部分(简化): 类助手{ 公共doStuff(输入:string):string{ 试一试{ 返回mightThrowAnException(输入); }捕捉(错误){ (err as any).inputData=input;//这将销毁错误数据 犯错误; } }

我是新的前端开发-我曾经是后端只有在过去几年。我正在尝试删除帮助程序中的错误消音器,并用更多信息重新显示被吞没的错误。在自定义ErrorHandler中,我将捕获错误端并将信息发送到后端服务。我不知道如何以正确的方式做这件事。 投掷部分(简化):

类助手{
公共doStuff(输入:string):string{
试一试{
返回mightThrowAnException(输入);
}捕捉(错误){
(err as any).inputData=input;//这将销毁错误数据
犯错误;
}
}
}
用你的手抓住这个


导出类GlobalErrorHandler扩展了ErrorHandler{
建造师(
专用注射器:注射器,
) {
超级();
}
公共句柄错误(错误:error){
让loggingData:任意={
errorMessage:error.message,
}
如果(typeof(error as any).inputData!==“undefined”){//也要替换此duck类型
日志数据={
…记录数据,
inputData:(错误为任意)。inputData,
}
}
//……这里有更多的东西
console.log(loggingData);//将数据发送到日志服务器ITRL
}
}
为了丰富错误,我已经尝试使用
@jsdevtools/ono
包:

class HelperWithOno {
  public doStuff(input: string): string {
    try {
      return mightThrowAnException(input);
    } catch (err) {
      throw ono(err, {inputData: input});
    }
  }
}
谁干的好。不幸的是,TS linter不喜欢使用
symbol
(),因此我得到了一个红色的构建管道

在使用Zend的PHP中,我将创建一个类,该类扩展帮助程序名称空间中的general
Exception
,并添加
inputData
属性。然后,我将能够检查捕获的异常的类型,并以所需的方式处理它

但我对angular和TypeScript非常陌生,不知道如何执行此任务

  • 我可以扩展
    Error
    类,但是
    • 是否需要手动复制“上一个”错误中的每个属性?或者我应该引入另一个属性
      previousError
      来存储原始错误吗
    • 类文件存储在哪里(目录)
    • 我应该为错误创建一个可注入工厂吗
    • 有经验的开发人员会在哪个模块中使用这个类
  • 等待
    ono
    修复
  • 还有其他最佳实践吗

    • 没有答案,所以我只发布了我的解决方案;希望有人能告诉我这是否是错误的/错误的,并提出更好的解决方案

      我在类
      Helper
      的目录中创建了一个名为
      errors
      的文件夹。此目录中有一个类为的文件

      导出类ProcessError扩展错误{
      公共输入数据:字符串;
      公共源错误:错误;
      公共构造函数(错误:error,inputData:string){
      const errorAsAny=任何错误;
      如果(errorAsAny中的“文件名”){
      //特定于Firefox的
      如果(errorAsAny中的“行号”){
      //@ts忽略
      super(error.message、errorAsAny.filename、errorAsAny.lineNumber);
      }否则{
      //@ts忽略
      super(error.message,errorAsAny.filename);
      }
      }否则{
      super(error.message);
      }
      //让我们应用一些你可以在https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-诸如错误数组和映射之类的内置程序可能不再工作
      setPrototypeOf(这是ProcessError.prototype);
      this.originalError=错误;
      this.inputData=inputData;
      this.stack=error.stack.split('\n').join('\n');//具体化堆栈;不确定是否需要
      }
      }
      
      现在我可以用

      类HelperWithCustomError{
      公共doStuff(输入:string):string{
      试一试{
      返回mightThrowAnException(输入);
      }捕捉(错误){
      抛出新的ProcessError(错误,输入);
      }
      }
      }
      
      并检查实例,而不是使用

      if(错误指示进程错误)
      
      BTW:我曾经为这篇文章写过源代码。这个错误处理程序的用途是什么?是什么阻止您将错误从
      catch
      发送到执行所有处理的服务?我还强烈建议不要在打字时欺骗typescript,创建一个保存输入和错误的接口。调用函数(调用者)可能知道错误并捕获异常。如果调用方(决定)不捕获异常,全局ErrorHandler应该记录失败。我想创建接口,但不知道为此目的将文件正确放置在何处(这就是(目录)将类文件存储在何处的问题背后的原因?),这确实是丰富javascript/typescript中错误的正确方法。