首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ember-cli http-proxy不工作

ember-cli http-proxy不工作
EN

Stack Overflow用户
提问于 2014-10-20 07:05:06
回答 1查看 2.5K关注 0票数 6

我是ember初学者,使用ember-cli v0.0.47,努力让http-proxy正常工作。

我正在尝试向远程OGC CSW服务器发出ajax请求。该请求是一个带有一些附加参数的普通HTTP GET请求,预期的响应是一个XML文档。

因为我正在做一个跨域请求,所以我决定使用一个服务器代理,以避免处理CORS的东西。

我已经使用ember-cli生成了代理配置:

代码语言:javascript
复制
ember-cli generate http-proxy geoland2 http://geoland2.meteo.pt

在我的控制器中,我定义了一个'search‘操作,它使用jquery.ajax与服务器通信:

代码语言:javascript
复制
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);
                }
            );
        }
    }
});

现在,当此操作被触发时,我希望调用

代码语言:javascript
复制
geoland2/geonetwork/srv/eng/csw 

将由ember-cli的服务器代理并发送到

代码语言:javascript
复制
http://geoland2.meteo.pt/geonetwork/srv/eng/csw?service=CSW&version=2.0.2&request=GetCapabilitites

这种关于应该发生什么的假设是正确的吗?

实际上,我看到的是请求根本没有被代理。ember应用程序尝试联系

代码语言:javascript
复制
http://localhost:4200/geoland2/geonetwork/srv/eng/csw?service=CSW&version=2.0.2&request=GetCapabilitites

由于指定的资源显然不可用,因此它会失败,并显示404 HTTP错误。

我已经编辑了自动生成的server/proxies/geoland2.js文件,方法是注释将proxyPath变量与URL的其余部分连接在一起的行:

代码语言:javascript
复制
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'});
  });
};

这似乎适用于我的用例,因为我的服务器的端点在

代码语言:javascript
复制
http://geoland2.meteo.pt/geonetwork/srv/eng/csw

而不是

代码语言:javascript
复制
http://geoland2.meteo.pt/geoland2/geonetwork/srv/eng/csw

我相信,即使这个更改可能是错误的,我也应该从原始服务器上恢复一些东西。

我是否仍然需要修复一些CORS相关的问题才能让代理工作?或者,为了正确设置http-proxy,可能还有更多的文件需要编辑?

EN

回答 1

Stack Overflow用户

发布于 2015-03-22 08:26:30

在当前版本的ember cli中,您可以使用指向外部服务器的代理选项启动您的应用程序。

代码语言:javascript
复制
ember server --proxy http://externalserver.ccc/api/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26456381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档