angular - 拦截来自 Angular2 的所有 HTTP 请求

标签 angular typescript angular2-http

我正在寻找一种方法来拦截 Angular 发出的所有 HTTP 请求并添加一些 header 。在 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:无法读取 null 的属性“merge”。可以看出this example .

Note: The implementation of MyOptions is the same as BaseRequestOptions, copied, because if you use BaseRequestOptions in {Provide: RequestOptions, useClass: BaseRequestOptions}, everything works, as can be seen this example.

最佳答案

我在您的代码中发现两个错误

  • 您没有导入RequestMethod

  • 您必须在 NgModule 之前声明扩展类 MyOptions 装饰器

这样你的演示将看起来像 Plunker

关于angular - 拦截来自 Angular2 的所有 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39798231/

相关文章:

Angular 2 :Error - Cannot find a differ supporting object '[object Object]' of type 'object' . NgFor 仅支持绑定(bind)到可迭代对象,例如数组

http - 如何使用 angular2 http API 跟踪上传/下载进度

angular - 找不到名称 'Office'

typescript - TypeError: book.isEqual 不是一个函数

angular - 如何为垫子凸起的按钮添加边框?

基于类属性的 typescript 函数返回类型

typescript - 在没有 Angular 的情况下理解 TypeScript 和 SystemJS

angular - 文件上传 Angular ?

Angular 表单组未使用复选框值更新

javascript - 侧边栏导航不适用于 Angular 和物化 css