如何从在不同端口上运行的本地 AngularJS 应用程序向本地 Rails 应用程序发出请求?
Posted
技术标签:
【中文标题】如何从在不同端口上运行的本地 AngularJS 应用程序向本地 Rails 应用程序发出请求?【英文标题】:How to make requests to a local Rails app from a local AngularJS app running on a different port? 【发布时间】:2015-02-24 19:24:07 【问题描述】:我正在开发一个带有 AngularJS 前端和 Rails 后端的 Web 应用程序。
我的目标是让两者完全分开,因为 Rails 应用程序最终将被降级为一个简单的 REST 服务器,而 AngularJS 前端将只是使用后端的少数不同客户端之一。出于这个原因,我不想将前端集成到 Rails 资产管道或类似中。
Rails 应用在 3000 端口上本地运行。前端使用 Gulp 编译静态资产,并使用 BrowserSync,其中包含我在 3001 端口上运行的开发服务器。
出于开发目的,在通过 Angular 的 $http 服务发出 HTTP 请求时,如何让 AngularJS 应用程序与 Rails 服务器通信,避免出现此浏览器错误(这是我所预料的)?
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:3001' is therefore not allowed access.
我只需要在 Rails 应用程序中设置 CORS 吗?还有另一种方法 - 也许是某种本地主机文件技巧(我在 Mac 上,FWIW)或类似的?我问是因为我的同事负责 Rails 应用程序(我对 Rails 的经验有限)但有一段时间不在城里;我的知识主要限于我设置的 AngularJS 堆栈。
我已经搜索和阅读了大约一个小时,但还没有找到任何我可以理解的适用于我的情况的东西。我可能不知道最好的搜索词。
感谢您的帮助!
【问题讨论】:
一种简单的方法是从相同的域/端口静态地为您的 Angular 应用程序的 index.html 提供服务,即http://localhost:3000
感谢@NewDev - 但我不确定这是否可能?请参阅***.com/questions/1694144/…。我尝试将 BrowserSync 配置为使用端口 3000,但它似乎很聪明地意识到该端口已被占用(被 Rails 应用程序占用),并且它会自动移动到下一个可用端口 3001。如果您是,请告诉我知道我想念的一种方法。
我的意思是将其作为 Rails 应用程序中的静态文件提供 - (2) 在下面的答案中。
【参考方案1】:
啊,太好了。以下是一些解决方案:
-
设置 CORS,应该不会太难。您所要做的就是将标题添加到为您的静态内容提供服务的页面(而不是 rails REST 端点),这样做的问题是您不应该真正这样做,除非您有充分的理由(请参阅 3)。您如何提供静态内容?如果它是一个流行的工具,应该有插件为你做标题
现在从 rails 后端提供 angularJS 页面(使用某种静态路由)
如果您正在考虑生产并想彻底解决这个问题,请使用 nginx 将这两个服务代理到一个域中,http://nginx.org/en/docs/beginners_guide.html
【讨论】:
感谢您的帮助,彼得!我接受了您的第三个建议,但暂时将其保留在本地(尽管我希望我们最终会在生产中使用类似的方法)。它大部分都在工作,但有一些小问题可能与 nginx 相关,也可能不相关。我就这些问题提出了一个单独的问题-如果您有时间,将不胜感激。 ***.com/questions/27713016/…以上是关于如何从在不同端口上运行的本地 AngularJS 应用程序向本地 Rails 应用程序发出请求?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 中的不同端口上运行 Azure Function 应用程序
AngularJS 应用程序在本地和 Heroku 上有不同的行为