Angular2中的响应拦截器

时间:2017-08-29 08:18:50

标签: angular angular2-services angular-http

我将许多HTTP请求发送到服务器,服务器返回每个请求带有新访问令牌的响应(可能在标题或正文中)。

有没有办法在它完成之前或之后处理所有响应,比如某些后端框架中的请求的中间件?

2 个答案:

答案 0 :(得分:7)

如果您使用的是Angular版本4+,您可以查看HttpClientModule,它为拦截器提供支持。

<强>例如

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

@Injectable()
export class AngularInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).do(event => {}, err => {
        if(err instanceof HttpErrorResponse){
            console.log("Error Caught By Interceptor");
            //Observable.throw(err);
        }
    });
  }
}

注册到app.module

@NgModule({
    declarations: [
        AppComponent
    ],
    imports: [
        BrowserModule,
        HttpClientModule
    ],
    providers: [
        [ { provide: HTTP_INTERCEPTORS, useClass: 
              AngularInterceptor, multi: true } ]
    ],
    bootstrap: [AppComponent]
})
export class AppModule {
}

更多关于HttpClientModule

如果您不使用角度v4,请在SO link

上查看此答案

答案 1 :(得分:-1)

您可以使用 http-interceptor

包源ng-http-interceptor

它处理http

的每个请求和响应