2014-10-19 68 views
6

我是一名初學者,使用ember-cli v0.0.47並努力讓http-proxy工作。ember-cli http-proxy不工作

我想向遠程OGC CSW服務器發出ajax請求。請求是帶有一些附加參數的普通HTTP GET請求,預期響應是XML文檔。

由於我提出了一個交叉源請求,我決定使用一個服務器代理,以避免處理CORS的東西。

我已經使用燼-CLI以產生與所述代理配置:

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

在我的控制器,我已經定義了使用jquery.ajax與服務器進行通信的「搜索」的操作:

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

現在,當這個動作被觸發,我希望在調用

geoland2/geonetwork/srv/eng/csw 

將被燼,CLI的服務器被代理,併發送至

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

這是假設會發生什麼正確嗎?

實際上我看到的是請求根本沒有被代理。該燼應用程序嘗試聯繫

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

並且由於指定的資源顯然不可用,它會因404 HTTP錯誤而失敗。

我已經評論說,與URL的其餘部分加入了proxyPath變量的行編輯自動生成的server/proxies/geoland2.js文件:

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

這似乎是適合我的使用情況下,我的服務器的終點是

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

而且不

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

我相信,即使這種改變可能是錯誤的,我應該從原始服務器取回某些東西。

難道我仍然需要修復一些與CORS有關的問題,以使代理工作?或者也許有更多的文件要編輯,以便正確設置HTTP代理?

+0

雖然我不能幫你解決你的問題,但我可以告訴你,沒有這樣的「燼服務器」。一切都在Ember中運行客戶端,如果你需要服務器端功能,你需要一個單獨的服務器,而Ember不能幫你創建它。 ember-cli服務器僅用於在開發過程中提供文件,而不用於動態處理。 – Leeft 2014-10-20 20:11:35

+0

是的,我明白這一點。我的意思是在開發過程中,ember-cli用來爲我的網站提供服務的快遞服務器。我認爲這個服務器應該代理我的ajax請求到真正的主機,它似乎並不想這樣做。 – 2014-10-21 01:06:26

+0

@RicardoGarciaSilva如果你只是清空'''proxyPath''',所以它只是'''var proxyPath =''''' – charleetm 2014-10-22 09:45:45

回答

1

在當前版本的ember cli中,您可以使用指向外部服務器的代理選項來啓動您的應用程序。

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