使用grunt-connect-proxy的Yeoman返回ECONNREFUSED错误

时间:2013-11-20 09:32:37

标签: angularjs gruntjs yeoman

我试图将grunt-connect-proxy添加到使用最新的yeoman +角度生成器的项目中。

但是,当遇到应转发的道路(例如127.0.0.1:9000/api/v1)时,服务器会返回此错误:

An error has occurred: {"code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect"}

我使用了修改后的Gruntfile:same as here

我应该怎么调试这个?最近有没有人有类似的问题与grunt-connect-proxy?

如果您有任何实际工作的话,我也会对代理api调用角网络应用程序的类似解决方案感兴趣。

感谢您帮助我!非常感谢!

3 个答案:

答案 0 :(得分:2)

Gruntfile很好,错误是由你的后端引起的,即localhost:3000(可能是Rails)。

如果是Rails,那就是CORS问题。您需要允许rails接受来自grunt服务器的连接。将'rack-cors'添加到gemfile并在development.rb配置文件中进行如下配置:

config.middleware.use Rack::Cors do
  allow do
    origins 'localhost:9000'
    resource '*', :headers => :any, :methods => [:get, :post, :options, :delete]
  end
end

检查此链接以获取详细设置,它帮助我实现了它。

Working with Angular.js and Rails

答案 1 :(得分:2)

我在尝试使用带有Laravel后端的AngularJS进行本地开发时遇到了这个问题。

我能够使用前面提到的Rails示例:Working with Angular.js and Rails来使用grunt-conenct-proxy示例,但是当尝试将本地连接到我的laravel后端时,我总是会遇到ECONNREFUSED错误。

我能看到的唯一真正的区别是rails服务器在0.0.0.0上旋转。我的apache服务器在localhost / 127.0.0.1上运行的位置。使用以下命令将我的apache服务器的配置更改为0.0.0.0后运行:

php artisan serve --host 0.0.0.0

我能够连接到我的支持而没有问题。如果有人可以评论和解释如何/为什么这个工作,我将非常感激。

答案 2 :(得分:1)

好吧,我终于以某种方式让它工作了。 但坦率地说,我不明白。它绝对与localhost127.0.0.1不同。它是怎么以这种方式结束的,我没有线索......

我将分享我在这样做时学到的东西,因为我发现在网上调试这些工作人员没有真正的答案。这是我学到的:

  • grunt有一个--verbose选项,可以帮助您了解正在发生的事情

如果正确配置了grunt-connect-proxy,您必须在启动时看到类似的内容:

Running "configureProxies" task
Proxy created for: /api/v1 to localhost:8000

在我的情况下,grunt服务器在127.0.0.1:9000上运行,localhost:8000上的第二台服务器上运行。我代理了api/v1上发出的请求,因此grunt server --verbose会在每个代理请求中输出类似的内容:

Proxied request: /api/v1/test -> http://localhost:8000/api/v1/test
{
    "host": "127.0.0.1:9000",
    "connection": "keep-alive",
    "accept": "...",
    "user-agent": "...",
    "accept-encoding": "...",
    "accept-language": "...",
    "cookie": "..."
}
  • 使用代理的全部意义是避免在第二台服务器上进行任何不必要的CORS配置

这是因为一旦部署了你的前端和后端代码将在同一台服务器上共存(=只在开发时才需要grunt服务器)。我想强调一点,因为@Ulugbek的回答可能暗示你需要CORS才能使grunt-connect-proxy工作。

  • 当您的第二台服务器没有响应时发生ECONNREFUSED错误

在我的情况下,我发现即使http://127.0.0.1:8000/api/v1/testhttp://localhost:8000/api/v1/test,{{1}}也没有响应。所以,我稍微弄乱了/ etc / hosts并通过确保两个端点都做出相应的响应来解决问题。

如果第二台服务器没有收听代理端点,则可能会发生同样的错误。