【问题标题】:Angular 2 And Controlling HTTP Request and ResponseAngular 2 和控制 HTTP 请求和响应
【发布时间】:2016-04-16 17:18:04
【问题描述】:

在 Angular 2 中,我试图控制 http 请求/响应以在发送请求和获取响应时设置/读取一些标头。

我只是像这样覆盖 HttpRequest,它对我有用:

@Injectable()
export class HttpRequest extends RequestOptions {
    constructor() {
         super({
             method: RequestMethod.Get,
             headers: new Headers({
                'X-Some-Header': 'some-content'})
        });
    }
}

但是对于覆盖响应我有问题:

@Injectable()
export class HttpResponse extends Response {
    constructor(responseOptions: ResponseOptions) {
        super(responseOptions);
        console.log("RESPONSE IS CREATED!!!!!!!");
    }
}

构造函数永远不会被调用,这里是引导程序:

bootstrap(AppComponent,
    [   ROUTER_PROVIDERS
        ,HTTP_PROVIDERS
        ,provide(RequestOptions, {useClass: HttpRequest})
        ,provide(Response, {useClass: HttpResponse})
    ]);

覆盖响应的原因是为了读取一些响应头和控制 404-Not Page Found global and ....

谢谢,

【问题讨论】:

    标签: angularjs angular


    【解决方案1】:

    您不能覆盖 Response 我记得看到它是在相关的 Http 类之一中使用 new Response 创建的,而不是从注入器请求它,这是合理的,因为 Response 需要是一个不同的每个请求的实例。

    【讨论】:

    • 那么请求和响应之间有什么区别,对于每个http调用我们都必须创建新的请求!注入器也应该能够创建新实例。我错了吗?
    • 注入器维护单例。注入工厂是可行的,但显然没有选择这种方式。一个请求会被触发,并且可以在以后的请求中重用,一个响应可能会更长,因为引用被传递给你的代码,并且取决于你保留它多长时间并从中读取。它超出了 Angulars 的控制。将重用此响应实例的后续请求将覆盖彼此的数据。
    • 我还不能理解,但无论如何另一种解决方案会覆盖 Http ?
    • 是的,另一种解决方案是通过扩展 Http 来覆盖此默认行为。
    【解决方案2】:

    您可以通过几种方式实现它:创建基础服务类或提供自定义 xhr 实现:

    @Injectable()
    export class CustomBrowserXhr extends BrowserXhr {
      constructor() {}
      build(): any {
        let xhr:XMLHttpRequest = super.build();
        /*...add headers, listeners etc...*/
        return <any>(xhr);
      }
    }
    
    bootstrap(AppComponent, [
      HTTP_PROVIDERS,
      provide(BrowserXhr, { useClass: CustomBrowserXhr })
    ]);
    

    【讨论】:

    • 正如我所说,您可以通过将侦听器直接添加到底层XMLHttpRequest 来捕获响应,这同样适用于自定义标头。
    • 是否有任何文档或示例用于操作 BrowserXhr、添加侦听器或...?
    • 根据规范:You must call setRequestHeader() after open(), but before send().所以你应该使用Angular Http模块api来设置请求头。
    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2011-02-23
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    相关资源
    最近更新 更多