angular使用拦截器统一配置接口错误提示

拦截器代码如下:

import {Injectable} from '@angular/core';
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';
import {ErrorObservable} from 'rxjs/observable/ErrorObservable';
import {catchError} from 'rxjs/operators';
import {mergeMap} from 'rxjs/operators';
@Injectable()
export class InterceptorService implements HttpInterceptor {
  constructor(private messageService: MessageService, private translate: TranslateService) {}

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).pipe(mergeMap((event: any) => {
        const err = event.body && event.body.err;
        if (err) {
          switch (err) {
            case -1:
              // 在提示框中展示错误消息
              break;
            default:
              break;
          }
        }
        if (event instanceof HttpResponse && event.status !== 200) {
          return ErrorObservable.create(event);
        }
        return Observable.create(observer => observer.next(event)); // 请求成功返回响应
      }),
      catchError((res: HttpResponse<any>) => {   // 请求失败处理
        this.messageService.clear();
        switch (res.status) {
          case 500:
            // 提示请求超时
            break;
          default:
            // 提示网络错误
        }
        return ErrorObservable.create(event);
      }));
  }
}

在对应module中注册提供商:

import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';

@NgModule({
    providers: [
    {provide: HTTP_INTERCEPTORS, useClass: InterceptorService, multi: true}
    ]
})
export class SharedModule {
}

如果所有模块都需要用拦截器的话,可以在shareModule中进行注册(如果在app.module中进行注册的话,只会在项目首次加载时有效)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值