我是一名初学者,使用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