Angular 2动态更改post请求中的基本url

15
我有一个Angular2 / TypeScript应用程序中的服务,它们不知道http服务的位置 - 这是显然需要的。
为了测试目的,我需要使用多个目标运行我的TypeScript应用程序 - 可以是本地主机(用于测试)或云环境。目标是通过源代码中的一行更改将所有请求从一个地址切换到另一个地址。可接受的解决方案不应要求在所有angular服务中添加目标位置作为常量值。
我发现了一个很好的例子,说明如何做到这一点 Angular 2 - Dynamically find base url to use in the http requests (services) 使用Angular2的2.0.0-beta.6版本,您可以覆盖合并方法。
import {BaseRequestOptions, RequestOptions, RequestOptionsArgs} from 'angular2/http';

export class CustomRequestOptions extends BaseRequestOptions {
    merge(options?:RequestOptionsArgs):RequestOptions {
        options.url = 'http://192.123.24.2:8080' + options.url;
        return super.merge(options);
    }
}

您可以这样注册这个类:

bootstrap(AppComponent, [HTTP_PROVIDERS,
    provide(BaseRequestOptions, { useClass: CustomRequestOptions })
]);

但是

它适用于GET请求,但不适用于POST请求 - POST中的基本URL未被更改(浏览器将请求发送到JavaScript主机服务器而不是所需的http目标)。

如何在Angular 2中动态更改POST请求的基本URL地址?


我这里有一个非 Angular 的解决方案,可以满足你的需求。你需要我把它发布为答案吗? - Aminadav Glickshtein
1个回答

5

尝试这种方法

import {BaseRequestOptions, RequestOptions, RequestOptionsArgs} from 'angular2/http';

export class CustomRequestOptions extends BaseRequestOptions {
    merge(options?:RequestOptionsArgs):RequestOptions {
        options.url = 'http://192.123.24.2:8080' + options.url;
        var result = super.merge(options);
        result.merge = this.merge;
        return result;
    }
}

并且。
bootstrap(AppComponent, [HTTP_PROVIDERS,
    // < RC.4
    provide(RequestOptions, { useClass: CustomRequestOptions }),
    // >= RC.4
    { provide: RequestOptions, useClass: CustomRequestOptions }
]);

谢谢。我没想到需要 **result.merge = this.merge;**,但实际上确实需要。 - Sławomir Siudek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接