拦截来自angular2的所有HTTP请求

时间:2016-09-30 18:50:40

标签: angular typescript angular2-http

我正在寻找一种方法来拦截角度所做的所有HTTP请求,并添加一些标头。在angular2 RC5之前的版本(NgModule之前)是这样的,例如:

class MyOptions extends BaseRequestOptions {
    Authorization: string = 'Bearer ' + localStorage.getItem('tokenName');
}

bootstrap(AppComponent,
    [HTTP_PROVIDERS,
        { provide: RequestOptions, useClass: MyOptions },
    appRouterProviders,
    disableDeprecatedForms(),
    provideForms(),
]).catch(err => console.error(err));

我目前的版本为2.0 final,而research on how this would be implemented in this version与此类似:

@NgModule({
  imports:      [ BrowserModule ],
  declarations: [ AppComponent ],
  providers: [
    { provide: RequestOptions, useClass: MyOptions }
  ],
  bootstrap: [ AppComponent ]
})
export class AppModule {
}

@Injectable()
export class MyOptions extends RequestOptions {
  constructor() { super({method: RequestMethod.Get, headers: new Headers()}); }
}

它显示以下错误:TypeError: Can not read property 'merge' of null。可以看出this example

  

注意:MyOptions的实施与复制的BaseRequestOptions相同,因为如果您在BaseRequestOptions中使用{Provide: RequestOptions, useClass: BaseRequestOptions},一切正常,可以看到{{ 3}}

2 个答案:

答案 0 :(得分:2)

我在你的代码中看到两个错误

  • 您没有导入RequestMethod

  • 您必须在MyOptions之前声明您的补充课程NgModule 装饰

这样您的演示就会像 Plunker

一样

答案 1 :(得分:0)

你可以看看下面的StackOverflow问题,他们会深入讨论这个问题,

What is httpinterceptor equivalent in angular2?

Interceptors in Angular2

希望这会有所帮助!!