【问题标题】:Handle HTTP Errors globally in angular以角度全局处理 HTTP 错误
【发布时间】:2019-10-12 23:01:00
【问题描述】:

我正在从事 http 错误处理。我已经在每个组件中编写了错误处理,这不是一个好的编码实践。所以我决定写一个全局通用的http错误处理。我已经搜索过了,我遇到了http-interceptor 概念,我认为存在更好的方法来处理 HTTP 错误。我在每个组件中尝试过的内容如下,而不是我需要一个全局方法。我已经有 http-interceptor 文件,代码粘贴在下面。

component.ts:

this.serviceName.methodName().catch(err => {
  console.log("Something went wrong with the request, please try again.");
  return Observable.throw(err.message.toUpperCase() || 'API_ERROR');
}).subscribe((res) => {
   console.log(res);
},
 error=>{
    this.openSnackBar('danger', "Something went wrong with the request, please try again.");
 });

http拦截器:

import { Injectable } from "@angular/core";
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpResponse } from "@angular/common/http";
import { Observable } from "rxjs";
import { tap } from 'rxjs/operators';

@Injectable()
export class HttpErrorInterceptor implements HttpInterceptor {
constructor() { }

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(tap(
        event => event instanceof HttpResponse ? 'succeeded' : '',
        err => 'failed'
    ))
 }
}

请帮忙。谢谢。

【问题讨论】:

标签: angular http-error


【解决方案1】:

试试这个:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(tap(
      event => event instanceof HttpResponse ? 'succeeded' : '',
      err => {
        this.openSnackBar('danger', "Something went wrong with the request, please try again.");
      }
    ))
  }

【讨论】:

  • 感谢您的回复,我已经有一个http-interceptor文件,请再次查看我的回答。请建议在我的 http-interceptor 文件中从您的答案中写入“错误”代码的位置。
  • 添加代码后出现错误,例如ERROR in src/app/services/common/httperror.interceptor.ts(15,13): error TS2345: Argument of type '(error: any) =&gt; void' is not assignable to parameter of type '() =&gt; void'.
猜你喜欢
  • 2019-11-14
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 2023-04-01
  • 2010-11-25
  • 1970-01-01
  • 2020-11-10
  • 2013-03-06
相关资源
最近更新 更多