【问题标题】:How do I use AWS S3 to host a static express/nodeJS page?如何使用 AWS S3 托管静态 express/nodeJS 页面?
【发布时间】:2018-05-26 18:18:02
【问题描述】:

总的来说,我是 nodejs/express/coding 的新手,所以如果这不是很清楚,我深表歉意。我正在为一份工作做代码挑战。

我已经完成了大部分项目。部分挑战是将其上传到 S3 上的存储桶。我创建了一个桶,这一切都完成了。我的问题是存储桶的根文件夹中需要有一个 index.html (我认为)。我所有的 html 页面(其中三个)都位于 views 目录中。当我尝试将我的 index.html 放在 cloud9 的根文件夹中时,它说在视图目录中找不到 index.html(显然,因为我将它移出)。我可以将视图目录设置在根文件夹中吗?

express/nodeJS 有没有办法将所有文件都放在根文件夹中?或者有没有办法让我的视图文件夹保持在 Cloud9 中的状态,并让一切都像从那里一样运行,除了在 S3 中?我肯定错过了什么。我完全不知道如何在 S3 上托管这个应用程序。在这里发帖是我最后的手段!感谢您的帮助。

【问题讨论】:

    标签: node.js amazon-web-services express amazon-s3


    【解决方案1】:

    让我们下订单吧。 Amazon S3 是一种云文件存储服务。它还可用于托管网站的静态资产

    据我了解,您正在使用 express 构建一些东西,使用视图目录,通常用于模板,因此,我想您正在通过 express 应用程序呈现您的 html 页面。这称为服务器端渲染,与只能提供文件的 amazon s3 完全不兼容。

    现在,您如何解决问题(考虑到您必须使用 s3)?视情况而定。

    如果您使用 express only 来呈现您的应用程序并提供静态资源(所以没有 API),您应该考虑进行一些重构:在这种情况下,您是基本上是在没有 API 的情况下构建一个 Web 应用程序。你不需要快递。也许您正在寻找像 Vue.js、React 或 Angular 这样的客户端框架。更笼统地说,您应该呈现您的应用程序客户端。

    如果你的 express server 也充当 api server,你应该划分你的项目。一方面,您拥有部署在某处的 express api 服务器。另一方面,你有你的网络应用,客户端渲染

    还有另一种解决方案:您可以使用像this 这样的prerender 从您的快速应用程序中生成静态资产。但是如果你是 web 开发的新手,我建议你不要评估这个选项

    【讨论】:

    • 这很有帮助。我最终选择了普通的 JS/HTML/CSS/jQuery。到目前为止一切顺利,让事情在 S3 上运行......谢谢!
    • 我其实有一个问题。我忘记了我需要使用 sendgrid API。它说要对表单进行编码以调用 sendgrid API,但是如果它是一个没有 nodejs 的静态站点,我该怎么做呢?我目前有基本的运行,但是没有 NodeJS 我不能进行 API 调用,对吧?如果有一种方法可以通过使用纯 html/javascript 来做到这一点,那么我有兴趣听到它。也许这都是一个把戏哈哈。谢谢!
    • 您可以从客户端进行API调用,这是所有网站都做的!搜索“how to make ajax call with Javascript (or jQuery, you said you are using jQuery, so you can take advantage it's simplefied sintax)”。如果 sendgrid 需要 API_KEY 进行身份验证,则公开此密钥客户端将导致不安全。但也许您不需要 API KEY,或者,如果您需要,您可以在客户端公开它以用于您的挑战目的(除非它是一个安全挑战:P)。 OUT:您应该将好的答案标记为有用甚至正确!如果我帮助了你,请按照我的回答去做
    • @Radar155 我还在开发一个使用 Express.js + Next.js 进行服务器端渲染和 api 端点的 Web 应用程序。我认为 S3 存储桶可以托管我的 express.js 应用程序代码库,并且可以使用 aws lambda 作为我的请求/响应处理程序进行访问。看来我完全错了,您能否建议可以使用哪些 aws 服务来托管和运行 node.js + Express.js + Next.js Web 应用程序。
    【解决方案2】:

    当您将静态文件移动到 S3 时,您需要相应地设置相对路径。

    我可以将视图目录设置在根文件夹中吗?

    没有。而是在 S3 中组织您的文件,其中 index.html 是根目录,文件的路径(例如 js/css/images/ 取自根文件夹)。

    注意:重要的是要了解您不能在 S3 中运行 NodeJS,而是使用 S3 的内部网络托管来提供静态内容。

    【讨论】:

      猜你喜欢
      • 2019-11-30
      • 2012-07-27
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      相关资源
      最近更新 更多