AWS后端+反应前端:处理请求

时间:2017-01-01 21:54:11

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

我搞乱了AWS,我使用dynamodb,api gateway和cognito设置了一个简单的REST API。我使用node + express编写了REST API。

我的节点应用程序在EB上,基本上我使用cognito处理API网关中的请求的身份验证。作为一个独立的,这似乎工作正常,因为我正在使用一个简单的反应应用程序测试它。

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

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

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

2 个答案:

答案 0 :(得分:1)

CloudFront是一个内容交付网络,旨在通过将文件副本放置在边缘位置,最大限度地减少来自世界各地的访问者的延迟和传输时间。它具有缓存功能,因此通过正确的设置,您应该能够从react-prerenderer中检索静态内容并缓存它们。

构建API网关以提供动态内容,并且仅在AWS的主可用区域中运行,而不是在边缘位置上运行。如果可能的话,通过API网关将请求路由到CloudFront会很奇怪。

另一种可能性是在您的应用程序中处理缓存(例如,在Express中你可以use mcache)。

答案 1 :(得分:1)

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

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

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

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

如果您稍微按照教程进行操作,您可以看到我正在服务来自S3存储桶的大多数请求,但路由路径从/rest/开始到API网关,相信这也适用于您的用例。 / p>