Angular 2 - 动态查找要在http请求(服务)中使用的基本URL

Soj*_*jye 5 rest url service http angular

我想知道是否有一种动态的方式来获取基本网址,以便在http请求中使用?

有没有办法动态获取http://192.123.24.2:8080

public getAllTickets() {
    this._http.get('http://192.123.24.2:8080/services/', {
        method: 'GET',
        headers: new Headers([
            'Accept', 'application/json',
            'Content-Type', 'application/json'
        ])
    })
Run Code Online (Sandbox Code Playgroud)

所以,我的请求看起来像:

public getAvailableVersions() {
    this._http.get('../services', {
        method: 'GET',
        headers: new Headers([
            'Accept', 'application/json',
            'Content-Type', 'application/json'
        ])
    })  
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种不必硬编码REST调用URL的方法.或者是具有URL的全局变量的唯一选择?

谢谢!

Thi*_*ier 3

使用 Angular2 2.0.0-beta.6 版本,您可以重写该merge方法

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

你可以这样注册这个类:

bootstrap(AppComponent, [HTTP_PROVIDERS,
    provide(BaseRequestOptions, { useClass: CustomRequestOptions })
]);
Run Code Online (Sandbox Code Playgroud)

另一种方法是扩展 HTTP 对象以在请求 URL 的开头添加基本 URL。

Http首先,您可以创建一个类,用一个属性扩展该类baseUrl

@Injectable()
export class CustomHttp extends Http {
  constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
    super(backend, defaultOptions);
    this.baseUrl = 'http://192.123.24.2:8080';
  }

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

  get(url: string, options?: RequestOptionsArgs): Observable<Response> {
    console.log('get...');
    return super.get(this.baseUrl + url, options).catch(res => {
      // do something
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

并按如下所述注册:

bootstrap(AppComponent, [HTTP_PROVIDERS,
    new Provider(Http, {
      useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
      deps: [XHRBackend, RequestOptions]
  })
]);
Run Code Online (Sandbox Code Playgroud)