2017-01-26 3 views
0

Schnell Version mit Basis - Was ich glaube, ich will: Wie kann ich angular2 http Service konfigurieren <base href>URL Probleme, wenn href

Längere Version zu ignorieren - Falls es ein besserer Ansatz ist: In mein Projekt bedienen wir zwei Winkel apps Apache mit:

http://host/index.html - angular 1 
http://host/ng2/index.html - angular 2 

Sie beide den gleichen Endpunkt

http://host/api/foo 

Beide Apps verwenden den gleichen vhost. Die App angular 2 befindet sich unter public/ng2 auf der Festplatte.

Das Problem läuft darauf hinaus, diese nach unten:

Wenn ich: <base href="/ng2/"> die Winkel App lädt in Ordnung. Allerdings werden alle Anfragen an die API mit dem http-Dienst verschmutzt.

http.get('/api/foo/2') goes to http://host/ng2/api/foo 

Meine aktuelle Lösung ist die Basis href <base href="/"> und setzen alle angular2 Dateien außer index.html direkt unter/public einzustellen. (index.html ist immer noch in/public/ng2) Das funktioniert, aber es ist ein Durcheinander.

Was würde ich gerne haben:

  • Alle angular2 Dateien in/public/NG2 sind (funktioniert wegen <base href="/ng2/"> oder anderen Apache config)
  • Outgoing Anfragen haben nicht NG2 angehängt Sie.

Es ist keine Option die URL

+2

ich für HTTP-Aufrufe einen $ config Variable mit der vollen Basis-URL Ihrer API empfehlen würde und http etwa so: 'http.get (api_root + '/ foo/2')' –

+0

Dank @ KiJéy . Was ich vergessen habe zu erwähnen, ist, dass wir mehrere Instanzen implementiert haben. Jeder mit seinem eigenen/api/foo/2. Z.B. (http: // customer1-host/api/foo und http: // customer2-host/api/foo). Ein relativer Pfad wäre also viel besser. – alfthan

+0

Können Sie erklären, warum Sie denken, dass ein relativer Pfad besser wäre? Ich stimme @ KiJéy zu, stelle die URL in eine Umgebungsdatei und verwende absolute Pfade. – shusson

Antwort

0

Am Ende hart codieren I tat, was Ki Jey vorschlug und benutzte eine absolute URL, um zur API zu kommen.

service.base.ts: 
protected getAbsoluteUrl(relativeUrl : String) : String { 
    return document.location.protocol + "//" + document.location.host + "/" + relativeUrl 
} 

service.ts: 
class service extends BaseService 
    getTheFoo(){ 
    http.get(this.getAbsoluteUrl(foo/2))... 
    }