我是一名初學者,使用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代理?
雖然我不能幫你解決你的問題,但我可以告訴你,沒有這樣的「燼服務器」。一切都在Ember中運行客戶端,如果你需要服務器端功能,你需要一個單獨的服務器,而Ember不能幫你創建它。 ember-cli服務器僅用於在開發過程中提供文件,而不用於動態處理。 – Leeft 2014-10-20 20:11:35
是的,我明白這一點。我的意思是在開發過程中,ember-cli用來爲我的網站提供服務的快遞服務器。我認爲這個服務器應該代理我的ajax請求到真正的主機,它似乎並不想這樣做。 – 2014-10-21 01:06:26
@RicardoGarciaSilva如果你只是清空'''proxyPath''',所以它只是'''var proxyPath =''''' – charleetm 2014-10-22 09:45:45