import { Observable } from 'rxjs/Observable'; import { Injectable } from '@angular/core'; import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http'; import 'rxjs/add/observable/throw'; import 'rxjs/add/operator/do'; import 'rxjs/add/operator/catch'; import { environment } from '../../environments/environment'; @Injectable() export class DemoHttpInterceptor implements HttpInterceptor { constructor() {} public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<Result<any>>> { req = req.clone({ url: `${environment.base}${req.url}` }); // 记录请求时间 const started = Date.now(); // 返回下一个中间件做更多处理 return next .handle(req) .do((event: HttpEvent<any>) => { if (event instanceof HttpResponse) { // 打印请求耗时 const elapsed = Date.now() - started; console.log(`Request for '${req.urlWithParams}' took ${elapsed} ms.`); } }) .catch((res: HttpResponse<any>) => { switch (res.status) { case 401: break; case 404: break; case 500: case 502: break; } // 抛出错误结束请求 return Observable.throw(res); }); } }