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:
Jetztexport 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 Anwendungsfallhttp://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?
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
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. –
@RicardoGarciaSilva was ist, wenn Sie nur '' 'proxyPath''' leeren, so ist es nur' '' var proxyPath = '' '' ' – charleetm