2014-10-19 66 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/