node.js - AWS后端+React前端: handling request

标签 node.js amazon-web-services reactjs aws-api-gateway

我正在摆弄 AWS,并使用 dynamodb、api 网关和 cognito 设置了一个简单的 REST API。我使用 Node + Express 编写了 REST API。

我的 Node 应用程序位于 EB 上,基本上我使用 cognito 处理 API 网关中的请求身份验证。作为独立的,这似乎工作正常,因为我正在使用一个简单的 react 应用程序对其进行测试。

现在我正在为我的实际 React 应用程序进行服务器端渲染,所以我试图找出处理这个问题的最佳方法。对于服务器端渲染,我有另一个名为react-app-server的 Node 应用程序,我想处理API网关上的缓存并使用cloudfront来提供静态文档、图像等。

因此,如果我访问 www.mysite.com/for-sale/some-item-thats-for-sale,此请求应首先检查该页面是否有缓存版本,然后服务它。否则,我需要让我的react-app-server渲染.html并提供/缓存它。由于有两个 Node 应用程序,api-server和react-app-server,我如何从我的api-gateway指向react-app-server来渲染html?

此场景如何适应 AWS 架构?我意识到这可能是一个非常愚蠢的问题,但我对此真的很陌生。谢谢

最佳答案

我建议您将 Cloudfront 放在所有应用程序的前面,并允许 Cloudfront 使用 Cache-Control 或您在每个 HTML 响应上返回的 Expires header 来处理所有缓存。这将允许从 Cloudfront 边缘服务器返回所有缓存的内容,从而提高性能并简化您的应用程序。

例如,如果您的 Node 应用程序返回带有 Cache-Control: public, max-age=31536000 header 的 HTML 文档,Cloudfront 将读取该值,并从边缘服务器返回相同的 HTML 响应长达 1 年(31,536,000 秒 = 1 年)。如果您的 Node 应用程序返回带有 Cache-Control: public, max-age=3600 的 HTML 文档,Cloudfront 将读取该值并在边缘服务器上将 HTML 缓存最多 1 小时。

您可以在分配中定义两个(或更多)源,并且可以使用行为来控制每个请求将委托(delegate)给哪个源。

实际上,我今天上午刚刚写了一篇关于在 API 网关前使用 Cloudfront 的教程:https://www.codeengine.com/articles/process-form-aws-api-gateway-lambda/ 。它与您的用例并不完全相同,但如果您希望在 API Gateway 之前使用 Cloudfront,它将帮助您入门。

如果您稍微遵循一下教程,您会发现我正在处理来自 S3 存储桶的大多数请求,但将以 /rest/ 开头的路径路由到 API Gateway,相信这也适合您的用例。

关于node.js - AWS后端+React前端: handling request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41419376/

相关文章:

ruby-on-rails - 如何从aws rds导出postgres数据库

javascript - 如何动态传递props?

javascript - 从不同的命名空间加入命名空间房间

node.js - 认证后如何从后端重定向到前端

node.js - rethinkdb orderby 不区分大小写

css - 带有reactjs的bootstrap scss不添加bootstrap类

reactjs - 带有 typescript React 的forwardRef

javascript - InfluxDB Node 模块不插入数据

amazon-web-services - 如何使用ldapsearch连接到AWS简单AD?

amazon-web-services - Elasticsearch:以专业领域为基础改进研究。进入模板