Javascript 在多个浏览器中登录时如何更新已更改的用户数据

Javascript 在多个浏览器中登录时如何更新已更改的用户数据,javascript,node.js,express,Javascript,Node.js,Express,我使用express会话中间件将用户会话存储在mongo集合中 当从其中一个用户会话执行更改时,更新所有用户会话的最佳方法是什么 例如,如果用户更改会话A中的电子邮件,我会立即更新它。但这些变化并不适用于其他国家 为清楚起见: 浏览器1-用户更改的电子邮件 浏览器2-重新加载页面,仍然获取旧数据 app.get('/change-email', async (req, res, next) => { const userData = await User.findOneAndUpdat

我使用express会话中间件将用户会话存储在mongo集合中

当从其中一个用户会话执行更改时,更新所有用户会话的最佳方法是什么

例如,如果用户更改会话A中的电子邮件,我会立即更新它。但这些变化并不适用于其他国家

为清楚起见: 浏览器1-用户更改的电子邮件 浏览器2-重新加载页面,仍然获取旧数据

app.get('/change-email', async (req, res, next) => {
  const userData = await User.findOneAndUpdate({ _id: req.session.user.id }, {
    $set: {
      email: req.body.email,
    },
  }, {
    new: true,
  });
  req.session.user = {
    id: userData._id,
    email: userData.email,
    username: userData.username,
    name: userData.name,
  };
});
我希望从会话A执行的更改将分发到其余的用户会话


作为问题的解决方案之一,我认为搜索所有用户会话并在每个用户数据(电子邮件、用户名、姓名等)更改时更新它们。

您可以在客户端使用
EventSource()
将数据从服务器流式传输到浏览器


在服务器上,向具有
MIME
类型
“文本/事件流”
的客户端发送一条或多条消息。例如,请参阅。

我有一个简单的多页应用程序,使用快速视图,并尝试使用更保守和同时有效的方式。@DanielR。在每个HTML
文档的
load
事件中,您可以创建一个新的
EventSource
实例,并使用
GET
请求将包含客户端唯一标识符的查询字符串参数发送到服务器。服务器检查是否更新了任何相关数据,并将消息流式传输到客户端。当任何HTML
文档
重新加载时,将创建一个新的
EventSource
实例,该实例将当前数据流传输到客户端。不知道你说的“保守”是什么意思。由于只需要从服务器到客户机之间进行通信,因此服务器执行为连续数据流提供服务的任务。@DanielR。替代方法包括使用专用的
工作者
s或
共享工作者
s,如果
Worker
s能够达到预期的结果,或者
serviceforner
,那么请感谢您的详细解释。我现在正在尝试实现
EventSource
,以按照您的建议流式传输数据。我一得到结果就会回复。@DanielR。看见