2014-10-19 11 views
6

Ich bin ein Ember Anfänger, mit Ember-CLI v0.0.47 und kämpfen, um HTTP-Proxy zu arbeiten.ember-cli http-proxy funktioniert nicht

Ich versuche, eine Ajax-Anfrage an einen entfernten OGC CSW Server zu machen. Die Anfrage ist eine normale HTTP-GET-Anfrage mit einigen zusätzlichen Parametern und die erwartete Antwort ist ein XML-Dokument.

Da ich eine Kreuzherkunftsanfrage mache, entschied ich mich, einen Server-Proxy zu verwenden, um den Umgang mit CORS-Sachen zu vermeiden.

Ich habe verwendet glut-cli die Proxy-Konfiguration mit zu generieren:

ember-cli generate http-proxy geoland2 http://geoland2.meteo.pt 

In meinem Controller, ich habe eine 'Suche' Aktion definiert, die jQuery.ajax mit dem Server kommuniziert:

Jetzt
export default Ember.Controller.extend({ 

    actions: { 
     search: function() { 
      Ember.$.ajax({ 
       url: 'geoland2/geonetwork/srv/eng/csw', 
       contentType: 'application/xml', 
       crossDomain: true, 
       xhrFields: { 
        withCredentials: true 
       }, 
       dataType: 'xml', 
       data: { 
        service: 'CSW', 
        version: '2.0.2', 
        request: 'GetCapabilities' 
       }, 
      }).then(
       function(data) { 
        alert(data); 
        Ember.$('.results').html(data); 
       }, 
       function(jqXHR, textStatus, errorThrown) { 
        Ember.$('.results').html(jqXHR.status + ' ' + errorThrown + ' - ' + jqXHR.responseText); 
       } 
      ); 
     } 
    } 
}); 

wenn diese Aktion ausgelöst wird, würde ich erwarten, dass der Aufruf von

geoland2/geonetwork/srv/eng/csw 

würde von Ember-cli des Servers und an

http://geoland2.meteo.pt/geonetwork/srv/eng/csw?service=CSW&version=2.0.2&request=GetCapabilitites 

Ist diese Annahme von proxied werden, was richtig passieren sollte?

In Wirklichkeit, was ich sehe, ist, dass die Anfrage überhaupt nicht Proxy ist. Die Glut App versucht,

zu kontaktieren und es schlägt mit einem 404 HTTP-Fehler fehl, weil die angegebene Ressource offensichtlich nicht verfügbar ist.

ich die automatisch generierte server/proxies/geoland2.js Datei bearbeitet habe, indem Sie die Zeile zu kommentieren, die die proxyPath Variable mit dem Rest der URL verbunden:

var proxyPath = '/geoland2'; 

module.exports = function(app) { 
    // For options, see: 
    // https://github.com/nodejitsu/node-http-proxy 
    var proxy = require('http-proxy').createProxyServer({}); 
    var path = require('path'); 

    app.use(proxyPath, function(req, res, next){ 
    // include root path in proxied request 
    //req.url = path.join(proxyPath, req.url); // I commented this line 
    proxy.web(req, res, {target: 'http://geoland2.meteo.pt:80'}); 
    }); 
}; 

als Endpunkt meines Sever ist bei

Dies scheint das Richtige für meinen Anwendungsfall
http://geoland2.meteo.pt/geonetwork/srv/eng/csw 

Und nicht

http://geoland2.meteo.pt/geoland2/geonetwork/srv/eng/csw 

Ich glaube, dass selbst wenn diese Änderung falsch sein sollte, ich etwas vom ursprünglichen Server zurückbekommen sollte.

Muss ich irgendwie noch einige CORS-Probleme beheben, damit der Proxy funktioniert? Oder vielleicht gibt es noch mehr Dateien zu bearbeiten, um den HTTP-Proxy korrekt einzurichten?

+0

Während ich Ihnen bei Ihrer speziellen Frage nicht helfen kann, kann ich Ihnen sagen, dass es so etwas wie "der Glut-Server" nicht gibt. Alles läuft Client-Seite in Ember, wenn Sie serverseitige Funktionalität benötigen, benötigen Sie einen separaten Server dafür und Ember kann Ihnen nicht helfen, es zu erstellen. Der ember-cli-Server dient nur dazu, die Dateien während der Entwicklung zu liefern, nicht für die dynamische Verarbeitung. – Leeft

+0

Ja, das verstehe ich. Was ich meine, ist der Express-Server, den ember-cli verwendet, um meine Website während der Entwicklung zu bedienen.Ich denke, dieser Server sollte meine Ajax-Anfrage an den echten Host weitergeben und scheint es nicht zu wollen. –

+0

@RicardoGarciaSilva was ist, wenn Sie nur '' 'proxyPath''' leeren, so ist es nur' '' var proxyPath = '' '' ' – charleetm

Antwort

1

In den aktuellen Versionen von ember cli können Sie Ihre App mit der Proxy-Option starten, die auf Ihren externen Server verweist.

ember server --proxy http://externalserver.ccc/api/ 
Verwandte Themen