在Angular2中扩展HTTP模块引发错误
我正在尝试扩展Angular2 HTTP模块,以便创建一个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
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),
},