基于Node.js和AWS开发全堆栈应用程序时的推荐做法

基于Node.js和AWS开发全堆栈应用程序时的推荐做法,node.js,database,amazon-web-services,express,amazon-dynamodb,Node.js,Database,Amazon Web Services,Express,Amazon Dynamodb,到目前为止,我一直在开发前端,现在我要创建我的第一个完整堆栈应用程序。我想使用node.js、express和AWS来实现这一点。 在设计阶段,我已经遇到了一些问题。因此,我有几个问题要问你: 我可以从服务器向所有已经以简单廉价的方式打开我的主页的客户端发送消息(简单JSON或数据库值)吗? 我说的不是登录用户,而是所有下载主页的用户(获取“/”) 使用管理面板(“www.xxxxxxxxx/admin”),我想每天向服务器发送一条消息。然后我想更改HTML以显示此消息。我正在考虑使用EJS来实

到目前为止,我一直在开发前端,现在我要创建我的第一个完整堆栈应用程序。我想使用node.js、express和AWS来实现这一点。 在设计阶段,我已经遇到了一些问题。因此,我有几个问题要问你:

  • 我可以从服务器向所有已经以简单廉价的方式打开我的主页的客户端发送消息(简单JSON或数据库值)吗? 我说的不是登录用户,而是所有下载主页的用户(获取“/”)
  • 使用管理面板(“www.xxxxxxxxx/admin”),我想每天向服务器发送一条消息。然后我想更改HTML以显示此消息。我正在考虑使用EJS来实现这一点,并从数据库下载这条消息。 我能做得更好吗?如果有人访问我的主页(获取“/”),EJS每次都会从数据库下载消息!即使其值在24小时内相同。我可以获取一次值,然后使用它直到值更改吗?如何储存信息?作为服务器上的JSON?或者在.env文件中
  • 如果用户刷新页面,我是否需要为每次调用所有AWS函数来构建页面付费?即使文件中没有任何更改
  • 如何检查页面是否有新内容,然后将其发送给用户,而不是发送未更改的页面文件:.html、.js、.css等
  • 我可以只向用户发送已更改的、动态创建的html文件,而不再次发送未更改的.js和.css文件吗
  • 是否每个打开主页(获取“/”)的用户都使用WebSocket/socket.io创建到服务器的新连接

  • 我将尝试回答您的一些问题:

  • 我可以从服务器向所有已经以简单方式打开我的主页的客户端发送消息(简单JSON或数据库值)吗 还有便宜的方式?我说的不是登录用户,而是所有 下载主页(获取“/”)
  • 我猜您的意思是从服务器向用户发送推送通知。这可以通过不同的服务来完成,具体取决于您试图构建的内容

    • 如果您计划使用GraphQL,您已经有了现成的GraphQL订阅。如果您使用的是AWS,请转到Appsync,这是用于GraphQL的AWS服务
    • 如果您使用的是REST和WebApp(不是移动应用),请使用lambdas进行AWS物联网。以下是使用无服务器框架(API网关+lambdas+IoT)为未经身份验证的用户提供的良好资源:
    • 如果您计划在移动应用程序上使用通知,您可以选择SNS,这是AWS世界中推送通知的“事实”服务
  • 使用管理面板(“www.xxxxxxxxx/admin”),我想每天向服务器发送一条消息。然后我想更改HTML以显示此消息。我正在考虑使用EJS来实现这一点,并从数据库下载这条消息。我能做得更好吗?如果有人访问我的主页(获取“/”),EJS每次都会从数据库下载消息!即使其值在24小时内相同。我可以获取一次值,然后使用它直到值更改吗?如何储存信息?作为服务器上的JSON?或者在.env文件中
  • 是的,这是预期的工作方式。使用Javascript中的前端代码动态更改HTML;它会在每次进入时(例如使用axios)调用后端,即“/”路径。您可以将此数据存储在前端变量中,甚至可以使用REDUX、VUEX等在前端使用状态管理。请记住,前端代码将始终在用户的浏览器中运行,而不是在服务器上运行

    如果用户刷新页面,我是否需要为每次调用所有AWS函数来构建页面付费?即使文件中没有任何更改

    你所能做的就是将你所有的HTML、CSS、Javascript存储在一个S3存储桶中,然后从那里开始提供服务(这是非常便宜的,甚至免费到一定的限制)。如果您想使用服务器端渲染(SSR),那么是的,您需要在用户每次发出GET请求时为他们提供服务。如果使用lambda,每月的第一个一百万请求是免费的。如果您有一个EC2实例来提供您的内容,那么t2.micro也是免费的。如果你需要的不止这些,你就得付钱

    如何检查页面是否有新内容,然后将其发送给用户,而不是发送未更改的页面文件:.html、.js、.css等

    我认为您需要了解JS(或React、Vue或Angular等框架)是如何做到这一点的。基本上,您可以在客户机上下载js代码,js提供了相应地更新后端和前端的所有功能。为了连接前端和后端,例如使用Axios

    我可以只向用户发送已更改的、动态创建的html文件,而不再次发送未更改的.js和.css文件吗

    见上面的答案。使用React或Vue之类的框架将对您大有帮助

    是否每个打开主页(获取“/”)的用户都使用WebSocket/socket.io创建到服务器的新连接

    这取决于你的代码。但默认情况下,用户每次访问您的域时都会发出一个新的GET请求,仅此而已。(如果不告诉代码这样做,则不会建立任何连接)


    希望这有帮助!!快乐编码

    谢谢你,苏much@roadtosleep不客气。如果你觉得这个解决方案有用,请投票给我的答案,非常感谢!