我试图将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调用角网络应用程序的类似解决方案感兴趣。
感谢您帮助我!非常感谢!
答案 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
检查此链接以获取详细设置,它帮助我实现了它。
答案 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)
好吧,我终于以某种方式让它工作了。
但坦率地说,我不明白。它绝对与localhost
与127.0.0.1
不同。它是怎么以这种方式结束的,我没有线索......
我将分享我在这样做时学到的东西,因为我发现在网上调试这些工作人员没有真正的答案。这是我学到的:
--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": "..."
}
这是因为一旦部署了你的前端和后端代码将在同一台服务器上共存(=只在开发时才需要grunt服务器)。我想强调一点,因为@Ulugbek的回答可能暗示你需要CORS才能使grunt-connect-proxy工作。
在我的情况下,我发现即使http://127.0.0.1:8000/api/v1/test
是http://localhost:8000/api/v1/test
,{{1}}也没有响应。所以,我稍微弄乱了/ etc / hosts并通过确保两个端点都做出相应的响应来解决问题。
如果第二台服务器没有收听代理端点,则可能会发生同样的错误。