【问题标题】:Angular and Rails workflowAngular 和 Rails 工作流程
【发布时间】:2016-03-13 09:28:01
【问题描述】:

我正在做一个项目,我们决定在前端和后端使用 Angular 和 Rails。我知道 Angular,后端人员也知道 Rails,我们不想把它们混在一起。像this 这样的教程有很多关于如何将其设置为单页应用程序的教程,我不想要这个。

  • 是否可以使用 Rails 创建一个 API,我可以用 Angular 调用它?如果是这样,是否有任何关于如何做到这一点的教程?
  • 创建单页应用程序并将 Angular 与 Rails 混合有什么好处?从我前端的角度来看,这似乎令人困惑。

【问题讨论】:

    标签: javascript ruby-on-rails angularjs ruby


    【解决方案1】:

    实际上,我目前正在开发一个同时使用 angular 和 rails 的项目。以下是我所做的,可能会对您有所帮助。

    把前端和后端分成2个项目

    对于后端,我当然使用 Rails。
    对于前端,我使用 Middleman 因为我是一个 Ruby 人:P
    选择中间人的另一个原因是它有 环境,就像 rails 一样。
    但是您或您的团队也可以选择 bower 或 browserify 或任何生成 STATIC 资产的工具。

    附:我尝试了 RequireJS,但因为它的样板代码复杂而决定不使用它。

    对 JSON 响应使用 Active Model Serializers

    后端和前端都说JSON(文件上传和下载除外),所以这是一个显而易见的选择。

    请注意,Rails 应用程序不应发送重定向,也不应呈现 HTML。

    对于前端,ngResource 对于消费 JSON 响应来说还不错,但有时您需要将其包装在自己的服务中(我基于 @ 制作了自己的 resources 工厂987654327@)

    使用Devise Token Auth提供OAuth2认证(可选)

    当然,您可以使用传统的基于 cookie 的身份验证。

    如果您决定提供 OAuth2,则 ng-token-auth 是 Devise 令牌身份验证的默认使用者。请注意,ng-token-auth 不适用于 angular-file-upload。

    对 CORS 使用 Rack CORS(可选)

    由于前端和后端是两个独立的项目,它们也可以部署到不同的域。在这种情况下,实现跨域资源共享(CORS)是必须的。 Rack CORS 可以帮助您使用 CORS,但您也可以在反向代理/负载均衡器层上实现它并选择不使用 Rack CORS。

    【讨论】:

      【解决方案2】:
      • 我建议看看 grape - https://github.com/ruby-grape/grape。这是创建 RESTfull API 的好方法。它真的很强大,可以生成招摇的动态文档。有很多有用的插件 - http://www.ruby-grape.org/projects/
      • 我认为在 RoR 中托管 Angular 应用程序的主要好处是资产管道。它开箱即用地自动编译/连接您的资产,您无需考虑构建和 gulp/grunt 任务。我以这种方式开发了一些应用程序。

      可能对前端部分有帮助的事情:

      【讨论】:

      • 谢谢。由于您与 Rails 相关的事情可以在前端部分帮助我。 Rails API 有什么方法可以吐出一些 JSON,我可以用 angular 去收集这些 JSON,而不必了解 gem 和其他 rails 的东西?
      • 这取决于如何开发 RoR API =) 它绝对应该是 RESTfull JSON API。我只是指出了如何做得更好。但是,如果您不打算在 RoR 应用程序中托管您的前端,那么所有其他事情都无关紧要。你可以使用 gulp 或 webpack 来编译和压缩你的前端。
      最近更新 更多