在Angular2中扩展HTTP模块引发错误

在Angular2中扩展HTTP模块引发错误,http,angular,typescript,Http,Angular,Typescript,我正在尝试扩展Angular2 HTTP模块,以便创建一个HTTP拦截器。。唯一的问题是,当我尝试扩展此模块时,出现以下错误: No provider for ConnectionBackend! 我不知道为什么会发生这种情况,似乎无法消除这个错误 这是我的自定义HTTP模块: import { Injectable } from "@angular/core"; import { Http, ConnectionBackend, RequestOptions, Request, Reques

我正在尝试扩展Angular2 HTTP模块,以便创建一个HTTP拦截器。。唯一的问题是,当我尝试扩展此模块时,出现以下错误:

No provider for ConnectionBackend!
我不知道为什么会发生这种情况,似乎无法消除这个错误

这是我的自定义HTTP模块:

import { Injectable } from "@angular/core";
import { Http, ConnectionBackend, RequestOptions, Request, RequestOptionsArgs, Response } from "@angular/http";
import { Observable } from "rxjs";

@Injectable()
export class HttpInterceptor extends Http {
    constructor(
        backend: ConnectionBackend,
        defaultOptions: RequestOptions
    ) {
        super(backend, defaultOptions);
    }

    request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
        console.log('request...');
        return super.request(url, options).catch(res => {
            // do something
        });
    }

    get(url: string, options?: RequestOptionsArgs): Observable<Response> {
        console.log('get...');
        return super.get(url, options).catch(res => {
            // do something
        });
    }
}
我已经尝试将my HttpInterceptor模块放在这个文件中的providers数组中,但仍然不起作用。有人能告诉我为什么这不起作用吗


谢谢

您必须自己构造并提供扩展类,如下所示:

    ProductService,
    {
        provide: HttpInterceptor,
        useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) =>
            new HttpInterceptor(backend, defaultOptions),
        deps: [XHRBackend, RequestOptions]
    }
],

另外,如果您想在其中注入另一个MyService,您可以这样做


之后,只需在
HttpInterceptor

中注入
MyService
,不幸的是,这不起作用。。我收到一个“xhrBackend未定义”错误耶,我刚刚意识到,就在你发布更新的答案时!干得好,干杯!在那里再注入一个“我的服务”怎么样?我将其添加到提供声明和
HttpInterceptor
构造函数中,并使用
XHRBackend
在浏览器平台上运行良好,但在服务器平台上存在一些问题。对我来说,在resolve guards中使用扩展http客户机时,路由无法正常工作。
    ProductService,
    {
        provide: HttpInterceptor,
        useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) =>
            new HttpInterceptor(backend, defaultOptions),
        deps: [XHRBackend, RequestOptions]
    }
],
   {
      deps: [XHRBackend, RequestOptions, MyService],
      provide: HttpInterceptor,
      useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, myService: MyService) =>
        new HttpInterceptor(backend, defaultOptions, myService),
    },