Mit dem angular-cli
ng serve
lokalen Entwicklungsserver werden alle statischen Dateien aus meinem Projektverzeichnis bereitgestellt.
Wie kann ich meine AJAX-Aufrufe an einen anderen Server weiterleiten?
quelle
Mit dem angular-cli
ng serve
lokalen Entwicklungsserver werden alle statischen Dateien aus meinem Projektverzeichnis bereitgestellt.
Wie kann ich meine AJAX-Aufrufe an einen anderen Server weiterleiten?
Jetzt ist eine bessere Dokumentation verfügbar, und Sie können sowohl JSON- als auch JavaScript-basierte Konfigurationen verwenden: Angular-CLI-Dokumentations-Proxy
Beispiel für eine https-Proxy-Konfiguration
{
"/angular": {
"target": {
"host": "github.com",
"protocol": "https:",
"port": 443
},
"secure": false,
"changeOrigin": true,
"logLevel": "info"
}
}
Meines Wissens wird das Einrichten von Proxys mit der .ember-cli-Datei mit Angular 2.0 nicht empfohlen. offizieller Weg ist wie unten
Bearbeiten Sie "start"
Ihre package.json
, um unten zu schauen
"start": "ng serve --proxy-config proxy.conf.json",
Erstellen Sie eine neue Datei, die proxy.conf.json
im Stammverzeichnis des Projekts aufgerufen wird, und definieren Sie darin Ihre Proxys wie unten beschrieben
{
"/api": {
"target": "http://api.yourdomai.com",
"secure": false
}
}
Wichtig ist, dass Sie npm start
anstelle von verwendenng serve
Lesen Sie hier mehr: Proxy Setup Angular 2 cli
/api/api/person
eine Idee, warum das passiert?Ich werde im folgenden Beispiel erklären, was Sie wissen müssen :
/ folder / sub-folder / * : Pfad sagt: Wenn ich diesen Pfad in meiner eckigen Anwendung sehe (der Pfad kann überall gespeichert werden), möchte ich etwas damit tun. Das Zeichen * gibt an, dass alles, was auf den Unterordner folgt, enthalten ist. Wenn Sie beispielsweise mehrere Schriftarten in / folder / sub-folder / haben , nimmt das * alle auf
"target" : " http: // localhost: 1100 " für den obigen Pfad machen die Ziel- URL zum Host / zur Quelle, daher haben wir im Hintergrund http: // localhost: 1100 / folder / sub-folder /
"pathRewrite ": {"^ / folder / sub-folder /": "/ new-folder /"}, Angenommen , Sie möchten Ihre Anwendung lokal testen, http: // localhost: 1100 / folder / sub- Ordner / enthält möglicherweise einen ungültigen Pfad: / Ordner / Unterordner /. Sie möchten diesen Pfad in einen korrekten Pfad ändern, der http: // localhost: 1100 / new- folder / lautet. Daher wird pathRewrite sehr nützlich. Der Pfad in der Anwendung wird ausgeschlossen (linke Seite) und der neu geschriebene Pfad (rechte Seite).
"sicher" : Gibt an, ob wir http oder https verwenden. Wenn im Zielattribut https verwendet wird, setzen Sie das sichere Attribut auf true, andernfalls auf false
"changeOrigin" : Option ist nur erforderlich, wenn Ihr Host-Ziel nicht die aktuelle Umgebung ist, zum Beispiel: localhost. Wenn Sie den Host in www.something.com ändern möchten, das das Ziel im Proxy wäre, setzen Sie das Attribut changeOrigin auf "true":
"logLevel" : Das Attribut gibt an, ob der Entwickler das Proxy auf seinem Terminal / cmd ausgeben möchte. Daher würde er den im Bild gezeigten Wert "debug" verwenden
Im Allgemeinen hilft der Proxy bei der lokalen Entwicklung der Anwendung. Sie legen Ihre Dateipfade für Produktionszwecke fest. Wenn Sie alle diese Dateien lokal in Ihrem Projekt haben, können Sie einfach Proxy verwenden, um darauf zuzugreifen, ohne den Pfad in Ihrer App dynamisch zu ändern.
Wenn es funktioniert, sollten Sie so etwas in Ihrem cmd / Terminal sehen.
quelle
Das war kurz davor, für mich zu arbeiten. Musste auch hinzufügen:
Vollständig
proxy.conf.json
unten gezeigt:quelle
BEARBEITEN: DIESES FUNKTIONIERT NICHT MEHR IN CURRENT ANGULAR-CLI
Eine aktuelle Lösung finden Sie in der Antwort von @imal hasaranga perera
Der Server
angular-cli
kommt aus demember-cli
Projekt. Erstellen Sie zum Konfigurieren des Servers eine.ember-cli
Datei im Projektstamm. Fügen Sie dort Ihre JSON-Konfiguration hinzu:Starten Sie den Server neu und er wird dort alle Anforderungen als Proxy verwenden.
Zum Beispiel mache ich relative Anfragen in meinem Code an
/v1/foo/123
, der bei abgeholt wirdhttps://api.example.com/v1/foo/123
.Sie können beim Starten des Servers auch ein Flag verwenden:
ng serve --proxy https://api.example.com
Aktuell für Angular-Cli-Version: 1.0.0-Beta.0
quelle
ember-cli
unter der Haube (jedenfalls vorerst), also schauen Sie vielleicht in ihre Dokumente? Diese Person scheint ein Beispiel für benutzerdefinierte Proxys zu haben: stackoverflow.com/q/30267849/227622Hier ist eine andere Art des Proxys, wenn Sie mehr Flexibilität benötigen:
Sie können die Option 'Router' und etwas Javascript-Code verwenden, um die Ziel-URL dynamisch neu zu schreiben. Dazu müssen Sie eine Javascript-Datei anstelle einer JSON-Datei als Parameter --proxy-conf in Ihrer Skriptparameterliste 'start' angeben:
Wie oben gezeigt, muss der Parameter --base-href auch auf / gesetzt werden, wenn Sie andernfalls <base href = "..."> auf einen Pfad in Ihrer index.html setzen. Diese Einstellung überschreibt dies und es muss sichergestellt werden, dass die URLs in den http-Anforderungen korrekt erstellt werden.
Dann benötigen Sie den folgenden oder einen ähnlichen Inhalt in Ihrer proxy.conf.js (nicht json!):
Beachten Sie, dass die Router-Option auf zwei Arten verwendet werden kann. Zum einen weisen Sie ein Objekt zu, das Schlüsselwertpaare enthält, wobei der Schlüssel der angeforderte Host / Pfad ist und der Wert die neu geschriebene Ziel-URL ist. Der andere Weg ist, wenn Sie eine Funktion mit einem benutzerdefinierten Code zuweisen, was ich in meinen Beispielen hier demonstriere. Im letzteren Fall stellte ich fest, dass die Zieloption noch auf etwas gesetzt werden muss, damit die Router-Option funktioniert. Wenn Sie der Router-Option eine benutzerdefinierte Funktion zuweisen, wird die Zieloption nicht verwendet, sodass sie einfach auf true gesetzt werden kann. Andernfalls muss es die Standardziel-URL sein.
Webpack verwendet http-proxy-middleware, daher finden Sie dort nützliche Dokumentation: https://github.com/chimurai/http-proxy-middleware/blob/master/README.md#http-proxy-middleware-options
Im folgenden Beispiel wird der Entwicklername aus einem Cookie abgerufen, um die Ziel-URL mithilfe einer benutzerdefinierten Funktion als Router zu ermitteln:
(Das Cookie wird für localhost und Pfad '/' gesetzt und läuft über ein Browser-Plugin lange ab. Wenn das Cookie nicht vorhanden ist, verweist die URL auf die Live-Site.)
quelle
Die Proxy-Dokumentation für Angular-CLI finden Sie hier:
https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md
Bearbeiten Sie nach dem Einrichten einer Datei mit dem Namen proxy.conf.json in Ihrem Stammordner Ihre package.json, um die Proxy-Konfiguration beim Start einzuschließen. Führen Sie nach dem Hinzufügen von "start": "ng serve --proxy-config proxy.conf.json" zu Ihren Skripten npm start und nicht ng serve aus, da dadurch das Flag-Setup in Ihrer package.json ignoriert wird.
aktuelle Version von angle-cli: 1.1.0
quelle
Es ist wichtig zu beachten, dass der Proxy-Pfad an alles angehängt wird , was Sie als Ziel konfiguriert haben. Also eine Konfiguration wie diese:
und eine Anfrage wie
http://localhost:4200/api
führt zu einem Anruf beihttp://myhost.com/api/api
. Ich denke, die Absicht hier ist, nicht zwei verschiedene Wege zwischen Entwicklungs- und Produktionsumgebung zu haben. Alles was Sie tun müssen, ist zu verwenden/api
Ihre Basis-URL verwenden.Der richtige Weg wäre also, einfach den Teil zu verwenden, der vor dem API-Pfad steht, in diesem Fall nur die Host-Adresse:
quelle
Für den Fall, dass jemand nach mehreren Kontexteinträgen für dasselbe Ziel oder dieselbe TypeScript-basierte Konfiguration sucht.
quelle
Hier ist ein weiteres Arbeitsbeispiel (@ angle / cli 1.0.4):
proxy.conf.json:
laufen mit:
quelle
Screenshot zum Thema Cors-Origin
Cors Problem wurde in meiner Bewerbung konfrontiert. siehe obigen Screenshot. Nach dem Hinzufügen der Proxy-Konfiguration wurde das Problem behoben. Meine Anwendungs-URL: localhost: 4200 und die API-URL anfordern: " http://www.datasciencetoolkit.org/maps/api/geocode/json?sensor=false&address= "
API-Seite No-Cors-Erlaubnis erlaubt. Außerdem kann ich das cors-Problem auf der Serverseite nicht ändern und musste es nur auf der Winkelseite (Client-Seite) ändern.
Zu lösende Schritte:
Hinweis: Wir haben die URL des Hostnamens in der API-Anfrage übersprungen. Diese wird automatisch hinzugefügt, während die Anfrage gestellt wird. Wenn wir proxy.conf.js ändern, müssen wir ng-serve neu starten, dann werden nur die Änderungen aktualisiert.
Nachdem Sie diesen Schritt abgeschlossen haben, starten Sie ng-serve Proxy neu
quelle
Schritt 1: Gehen Sie zu Ihrem Stammordner. Erstellen Sie proxy.conf.json
Schritt 2: Gehen Sie zu package.json und suchen Sie "scripts" unter "start".
Schritt 3: Fügen Sie nun / auth / zu Ihrem http hinzu
Schritt 4: Letzter Schritt im Terminal läuft npm start
quelle
Fügen Sie in proxy.conf.json hinzu
{ "/api": { "target": "http://targetIP:9080", "secure": false, "pathRewrite": {"^/proxy" : ""}, "changeOrigin": true, "logLevel": "debug" } }
in package.json machen
"start": "ng serve --proxy-config proxy.conf.json"
im Code let url = "/ api / clnsIt / dev / 78"; Diese URL wird in http: // targetIP: 9080 / api / clnsIt / dev / 78 übersetzt
quelle