Javascript 节点JS+;Express JS:从其他位置刷新页面
我有以下问题:我想更改页面上的一个变量。输入来自另一个页面,因此: 我使用Node.js、Express.js和Ejs来完成这个任务Javascript 节点JS+;Express JS:从其他位置刷新页面,javascript,node.js,express,Javascript,Node.js,Express,我有以下问题:我想更改页面上的一个变量。输入来自另一个页面,因此: 我使用Node.js、Express.js和Ejs来完成这个任务 服务器-存储值 索引页-带有输入字段和发送按钮的控制页 显示页面-显示变量 我正在将带有fetch post的变量发送到服务器。在服务器上,我使用请求正文值更改变量,当我手动重新加载“显示页面”时,我会看到新值。问题是:我需要在没有任何手动刷新或其他事情的情况下更改它,因为这是不可能的 “location.reload()”有可能每X秒刷新一次。但这不是我想要
- 服务器-存储值
- 索引页-带有输入字段和发送按钮的控制页
- 显示页面-显示变量
编辑:我应该提到,这个项目将只是在我们的网络中使用,它不会对其他用户开放。就像公司内部的仪表板一样。
因此,一个“快速而肮脏”的解决方案也可以奏效,但我想学习一些东西,并希望以正确的方式来做。想到的最简单的解决方案是让服务器返回正文中更新的帖子,然后用它来更新页面
您还可以阅读有关长/短轮询和WebSocket的内容。一个可能的解决方案是在使用fetch成功完成post操作后添加页面重新加载代码
fetch(url, {
method: 'post',
body: body
}).then(function(response) {
return response.json();
}).then((data) => {
// refresh page here
window.location.replace(url);
});
这是一个非常常见的场景,有几种解决方案:
这是一个很好的建议,可以使用web套接字来解决这个问题;但我必须给端点打一次电话才能看到变化。不过我会看看WebSocket。我可以每x秒刷新一次,但在我看来这太“脏”了。根据你网站的规模,“适当”的解决方案可能会变糟,“快速而糟糕”的解决方案可以挽救一天。对我们大多数人来说,WebSocket每次都会赢。但是,如果你在谷歌或Netflix规模上工作,你可能会发现来自数百万(而不是数百)客户端的持久开放套接字将使你的操作系统缺少开放文件描述符。在这一点上,通过ajax进行轮询要多得多scaleable@slebetman我不能同意你的意见。你不应该仅仅因为世界上最大的网站之一有问题就推荐过时的东西。大多数用户都有另一个用户案例,尤其是当他们在这里问这类问题时。此外,还有一种使用WS订阅和取消订阅的方法,您可以关闭与WS的连接,您可以使用很少的WS-MicroService来处理不同的页面。所以这不是一个技术问题,这是一个技术问题。我应该提到的是,这个项目只会在我们的网络中使用,不会对其他用户开放。就像公司内部的仪表板一样。所以,一个“快速而肮脏”的解决方案也可以奏效,但我想学点东西,并且想用正确的方式去做。就像我刚才说的。你需要了解你的工具。Websockets更新效率更高,Linux上约有500个并行套接字(如果配置操作系统,则最高可达5000个),Win10上约有4000个并行套接字(或早期Windows上约有200个)。在这之后,ajax循环比WebSocketsOn Linux更高效,您可以将最大文件描述符的数量增加到超过100000个打开的连接(请记住,这些连接还与stdin/stdout和磁盘上的打开文件共享描述符)但是,如果文件描述符的数量太多,您可能会遇到无法预测的性能问题。不确定是否可以配置windows,因为如果在页面加载时调用源代码,则该数字似乎是在源代码中定义的,如果服务器返回2xx,则这将导致页面在无限循环中重新加载-效率非常低,更不用说使页面无法使用。不过,您的思路是正确的。只是不要重新加载页面。更新本地状态instea