在Angular中使用全局HTTP拦截器作为错误处理程序时,如何识别抛出错误的组件/服务?

在Angular中使用全局HTTP拦截器作为错误处理程序时,如何识别抛出错误的组件/服务?,angular,frontend,angular-http-interceptors,Angular,Frontend,Angular Http Interceptors,我正在使用HTTPInterceptor来处理Angular应用程序中发生的任何错误。一旦发生错误,它将被抛出并由该interceptor处理。但是,一旦向拦截器抛出错误,我想确定是哪个组件或服务抛出了该错误 如果main.service.ts是发生错误的服务,我希望在HTTPInterceptor类中获得名称“main.service.ts”。我没有获得引发错误的组件,但是我们可以确定是哪个方法引发了错误。 我们需要一个名为“提取堆栈”的包 npm安装提取堆栈 然后,获取函数名,如下所示。An

我正在使用HTTPInterceptor来处理Angular应用程序中发生的任何错误。一旦发生错误,它将被抛出并由该interceptor处理。但是,一旦向拦截器抛出错误,我想确定是哪个组件或服务抛出了该错误


如果main.service.ts是发生错误的服务,我希望在HTTPInterceptor类中获得名称“main.service.ts”。

我没有获得引发错误的组件,但是我们可以确定是哪个方法引发了错误。 我们需要一个名为“提取堆栈”的包

npm安装提取堆栈

然后,获取函数名,如下所示。Angular即使在生产模式下也不会更改函数名,因此我们可以捕获发生错误的方法,如-:


var function_name=extractStack.lines(errors)[0]。拆分('.')[1]。拆分('')[0]

如果您
抛出err
,它应该在控制台跟踪中输出服务。@Maryannah.console.trace()实际上给出了错误的堆栈跟踪。但是,它不包含引发错误的组件/服务名称。是的,它提供了跟踪,跟踪会爬回错误的来源,从拦截器到核心,通过RxJS&服务。@Maryannah好的,是的,在控制台上得到了名称。。。。你知道我可以在angular应用程序上检索它吗(比如检索组件名称并将其存储在angular变量中)?哼,不,我不这么认为。您必须将服务/组件作为上下文/参数提供,这意味着它不能是隐式的,也就是说,您必须显式地编写它。