2014-10-19 17 views
6

Sono un principiante ember, che utilizza ember-cli v0.0.47 e che fatica a far funzionare il proxy http.http-proxy ember-cli non funziona

Sto tentando di effettuare una richiesta Ajax su un server OGC CSW remoto. La richiesta è una normale richiesta HTTP GET con alcuni parametri aggiuntivi e la risposta prevista è un documento XML.

Poiché sto effettuando una richiesta di origine incrociata, ho deciso di utilizzare un proxy server, per evitare di occuparmi di roba CORS.

Ho usato brace-cli per generare la configurazione proxy con:

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

Nel mio controller, ho definito un'azione 'ricerca' che utilizza jquery.ajax per comunicare con il server:

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); 
       } 
      ); 
     } 
    } 
}); 

Ora, quando viene attivato questa azione, mi sarei aspettato che la chiamata a

geoland2/geonetwork/srv/eng/csw 

sarebbero proxy server di brace-cli e inviato a

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

È questo assunzione di ciò che dovrebbe accadere corretta?

In realtà quello che vedo è che la richiesta non è affatto inoltrata. L'app ember tenta di contattare

http://localhost:4200/geoland2/geonetwork/srv/eng/csw?service=CSW&version=2.0.2&request=GetCapabilitites 

e non riesce con un errore HTTP 404 poiché la risorsa specificata non è ovviamente disponibile.

ho modificato il file generato automaticamente server/proxies/geoland2.js commentando la linea che univa la variabile proxyPath con il resto del URL:

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'}); 
    }); 
}; 

Questo sembra giusto per il mio caso d'uso come punto finale del mio Sever è al

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

E non

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

Credo che anche se questa modifica fosse errata, dovrei recuperare qualcosa dal server originale.

In qualche modo devo ancora risolvere alcuni problemi CORS relativi al funzionamento del proxy? O forse ci sono altri file da modificare per poter impostare correttamente il proxy http?

+0

Mentre non posso aiutarti con la tua particolare domanda, posso dirti che non esiste una cosa come "il server di terra". Tutto gira lato client in Ember, se hai bisogno di funzionalità lato server hai bisogno di un server separato per quello ed Ember non può aiutarti a crearlo. Il server ember-cli è solo per servire i file durante lo sviluppo, non per l'elaborazione dinamica. – Leeft

+0

Sì, lo capisco. Quello che voglio dire è il server express che ember-cli usa per servire il mio sito durante lo sviluppo.Penso che questo server dovrebbe proxy la mia richiesta Ajax al vero host e non sembra voler farlo. –

+0

@RicardoGarciaSilva cosa succede se si svuota '' 'proxyPath''' quindi è solo' '' var proxyPath = '' '' ' – charleetm

risposta

1

Nelle versioni correnti di ember cli è possibile avviare l'app utilizzando l'opzione proxy che punta al server esterno.

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