Sails.js 如何为 Yeoman 生成的应用提供服务

How can Sails.js serve a Yeoman generated app

我是 Sails.js 的新手,对此我感到非常兴奋。它是创建 API 的绝佳工具。 我还使用 Yeoman 生成的单页应用程序(jquery 或 angular)工作了一段时间,它们非常适合客户端逻辑。

但是,目前基于这两种技术制作应用程序的唯一方法是将它们分成两个完全独立的项目,这很浪费。

我正在寻找一种将两者结合起来的方法。 我想让 Sails.js 为 Web 应用程序的静态资产提供服务并加载其 index.html 文件(而不是 homepage.ejs)。我也想要开发环境(grunt,live-reload 正常工作)。

我尝试在 assets 文件夹中创建一个 yeoman 项目并将布局重定向到 index.html 但它有几个问题: - 我无法区分 app/ 文件夹(在开发期间)和 dist/ 文件夹(在生产中) - bower_components link 已损坏(它指的是 /bower_components 而不是 /assets/app/bower_components)

我想可能还有更多问题我还没有发现。

有没有人尝试(并成功)结合这些技术?

可能不完全是你要找的东西,但我不久前看过一个项目,它似乎在做类似的事情;结合前端 (jquery/angular) + 后端 (sails)。

http://sanestack.com/

主要区别在于 sanestack 使用 ember 作为前端(这可能不适合您)。但它的好处是生成器同时在前端和后端项目上创建适当的资源。

至少,希望它能给你一些关于如何将 sails 与前端项目相结合的想法。

您可以通过执行以下步骤来提供静态 index.html 而不是 homepage.ejs:

  1. 将您的 index.html 文件放在 assets 文件夹下。
  2. 在配置文件夹中打开 routes.js 并更改
  3. 中的代码
    '/': {
       view: 'homepage'
    }

    '/': {
       view: false
    }

assets文件夹作为网站的根文件夹。如果您的 "angular.min.js" 文件位于 "assets\bower_components\angular" 文件夹中,这将在浏览器中转换为“/bower_components/angular/angular.min.js”。

中所述,您可以轻松地使用 Sails 为您的静态站点提供服务。

不过,我还想推荐一种替代方法 - 因为您的应用程序前端与您的前端完全分离,您可以利用这种分离来使用不同的策略分别扩展您的后端和前端。

所以现在,假设您将应用程序部署在单个实例上,您可以使用可以非常有效地提供静态资产的 Nginx,并将其用作 reverse proxy 到您的 API。

最终,当您需要扩展您的应用程序并希望将应用程序部署到实例集群(比如说在 AWS 上)时,您可以将静态资产推送到 S3 存储桶上并部署您的 API在 EC2 实例上。每次必须在前端进行一些视觉更改时,您都不必重新部署 API。您可以从从单个 S3 存储桶获取资产的 CDN(如 AWS cloudfront)为您的整个前端提供服务。为您的 API 提供服务的实例将完全摆脱提供静态资产的开销。