我是一名初学者,使用ember-cli v0.0.47并努力让http-proxy工作。
我正在尝试向远程OGC CSW服务器发出ajax请求。该请求是一个普通的HTTP GET请求,带有一些额外的参数,预期的响应是一个XML文档。
由于我正在进行交叉源请求,所以我决定使用服务器代理,以避免处理CORS内容。
我使用ember-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
将由ember-cli的服务器代理并发送到
http://geoland2.meteo.pt/geonetwork/srv/eng/csw?service=CSW&version=2.0.2&request=GetCapabilitites
这种假设应该是正确的吗?
实际上,我看到的是请求根本没有代理。 ember应用尝试联系
http://localhost:4200/geoland2/geonetwork/srv/eng/csw?service=CSW&version=2.0.2&request=GetCapabilitites
并且因为指定的资源显然不可用而因404 HTTP错误而失败。
我已经编辑了自动生成的server/proxies/geoland2.js
文件,方法是将加入proxyPath
变量的行与其余网址一起注释:
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-proxy?
答案 0 :(得分:1)
在当前版本的ember cli中,您可以使用指向外部服务器的代理选项启动应用程序。
ember server --proxy http://externalserver.ccc/api/