Angular 2 динамически меняет базовый url в почтовых запросах

У меня есть службы angular в приложении Angular2/TypeScript, которые не знают о местонахождении http-сервисов - что, очевидно, требуется.

Для целей тестирования мне нужно запустить мое приложение TypeScript с несколькими целевыми объектами - это может быть либо localhost (для тестирования), либо облачная среда. Цель состоит в том, чтобы переключить весь запрос с одного адреса на другой с однострочным изменением исходного кода. Для приемлемого решения не требуется добавлять целевое местоположение в качестве значения констант во всех сервисах angular.

Я нашел хороший пример, как это сделать Angular 2 - Динамически найти базовый url для использования в http-запросах (услугах)

С версией 2.0.0-beta.6 из Angular2 вы можете переопределить метод слияния

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-запросов - базовый URL-адрес в POST не был затронут (браузер отправляет запрос хост-серверу JavaScript вместо требуемой http-цели).

Как динамически изменять адрес базового url для POST-запросов в angular 2?

Ответы

Ответ 1

Попробуйте этот путь

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 }
]);