标签: angular-errorhandler

Angular 6中的Http错误处理

我正在尝试使用角度为6的以下类来处理http错误.我从服务器获得了401 unAuthorized状态.但是,我没有看到控制台错误消息.

HttpErrorsHandler.ts文件

import { ErrorHandler, Injectable} from '@angular/core';
    @Injectable()
    export class HttpErrorsHandler implements ErrorHandler {
      handleError(error: Error) {
         // Do whatever you like with the error (send it to the server?)
         // And log it to the console
         console.error('It happens: ', error);
      }
    }
Run Code Online (Sandbox Code Playgroud)

http错误

app.module.ts文件

providers: [{provide: ErrorHandler, useClass: HttpErrorsHandler}],
Run Code Online (Sandbox Code Playgroud)

HttpCallFile

import { Injectable , Component} from '@angular/core';
import { HttpClient, HttpHeaders } from "@angular/common/http";
import { Observable } from 'rxjs';
import {AuthServiceJwt} from '../Common/sevice.auth.component';

@Injectable()
export class GenericHttpClientService …
Run Code Online (Sandbox Code Playgroud)

typescript angular-routing angular angular6 angular-errorhandler

24
推荐指数
2
解决办法
6万
查看次数

如何限制ErrorHandler的范围?

我有这样定义的全局错误处理程序(清除了简化/专有信息):

export class ErrorsHandler extends CommonBase implements ErrorHandler {
  constructor(protected loggingService: LoggingService,
              private coreService: CoreService {

    super(loggingService);
  }

  handleError(error: Error) {
    if (error && error.stack && (error.stack.indexOf(Constants.PACKAGE_NAME) >= 0)) {
      this.logSystemError(error, true);
      this.coreService.showSystemError(error, this.owner);
    }
    else {
      // Rethrow all other errors.
      throw error;
    }
  }
Run Code Online (Sandbox Code Playgroud)

并且在我的模块(并且只有我的模块)中,它被注册为提供者,如下所示:

export function errorHandlerFactory(loggingService: LoggingService, coreService: CoreService) {
  return new ErrorsHandler(loggingService, coreService);
}

providers: [
    { provide: ErrorHandler, useFactory: errorHandlerFactory, deps: [LoggingService, CoreService] }
]
Run Code Online (Sandbox Code Playgroud)

我的模块被其他人使用,我们一起组成了一个大型应用程序。我的问题是,即使我尝试过滤仅与我的模块/软件包相关的那些脚本,也会捕获到所有脚本错误,因为过滤是在中完成的handleError()。即使我重新抛出了与我无关的错误(在else上面),其他模块/程序包的开发人员仍在抱怨我在全球范围内捕获所有内容,并且重新抛出的错误已经失去了某些上下文/信息。

所以问题是,是否有可能以某种方式限制我的错误处理程序的范围,以仅捕获和处理源自我的模块/包的脚本错误(而完全忽略应用程序中的所有其他脚本错误)?

经过大量的搜寻之后,我唯一想到的替代方法是将try/catch其放置在任何地方,这是我想尽可能避免的方法。

error-handling typescript angular angular-errorhandler angular7

6
推荐指数
1
解决办法
284
查看次数

错误处理程序和 RxJS 6.2.2

我有一个带有 globalError 处理程序的应用程序,如下所示:

import { Injectable, ErrorHandler, Injector } from "@angular/core";
import { Router } from "@angular/router";

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {

  constructor(
    private injector: Injector) { }


  public handleError(error: any) {
    console.error("Something went wrong");
    //.. Handle error here
  }
}
Run Code Online (Sandbox Code Playgroud)

这总是适用于每个星座。如果抛出错误,全局处理程序会捕获并处理它。

现在升级到 RxJs 6.2.2 后,我明白捕捉 http 错误发生了变化。

代码错误仍然有效,但 HttpClient 抛出的错误不会被全局捕获。GlobalErrorHandler 不再被触发。

我知道我可以处理我的服务中的错误,并且工作正常:

doSomething() {
    return this.http
      .get("http://someURL").pipe(
      map((res: any) => { console.log(res) }),
        catchError(this.handleError<any>(`blabla`))
      );
  }

  /**
 * Handle Http operation that failed.
 * Let the app …
Run Code Online (Sandbox Code Playgroud)

rxjs angular angular6 angular-errorhandler rxjs6

5
推荐指数
1
解决办法
3713
查看次数

Angular - ErrorHandler 中的导航仅适用于 zone.run()

我在 Angular(版本 5.2.0)中为所有未处理的异常实现了一个全局错误处理程序。

全局错误处理程序如下所示:

import { Router } from '@angular/router';
import { ErrorHandler, Injectable, Injector, NgZone } from '@angular/core';
import { LoggingService } from '../services/logging.service';

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {

  private router: Router;

  constructor(injector: Injector, private zone: NgZone, private loggingService: LoggingService) {
    setTimeout(() => {
      this.router = injector.get(Router);
    });
  }

  handleError(error) {
    this.loggingService.logErrorToApi(error);
    this.zone.run(() => this.router.navigate(['/error']));
  }
}
Run Code Online (Sandbox Code Playgroud)

仅当我有电话时,路由才有效this.zone.run(...)。如果我删除此调用,路由只会将路由添加error到 URL,并且不会显示组件。ngOnInit 也没有被调用。

如果我必须使用这样的“黑客”来让我的路由对我起作用,那么我的应用程序中的某个地方似乎配置错​​误。

有人知道我需要更改什么才能使其在没有区域呼叫的情况下运行吗?


我的路线:

const appRoutes: Routes = [
  {
    path: 'error',
    component: ErrorComponent …
Run Code Online (Sandbox Code Playgroud)

angular angular-router angular-errorhandler

2
推荐指数
1
解决办法
4022
查看次数