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

标签 javascript node.js express

我使用 express-session 中间件将用户 session 存储在 mongo 集合中。

当其中一个用户 session 执行更改时,这是更新所有用户 session 的最佳方式。

例如,如果用户更改 session 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,
  };
});

我希望从 session A 执行的更改将分发到其余用户 session 。

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

最佳答案

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

在服务器上向具有 MIME 类型 "text/event-stream" 的客户端发送一条或多条消息。例如,参见 How to read and echo file size of uploaded file being written at server in real time without blocking at both server and client? .

关于javascript - 在多个浏览器中登录时如何更新更改的用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611851/

相关文章:

javascript:无法让 setTimeout 正常工作

node.js - 从终端读取 ANSI 转义

node.js - 使用不是 Sequelize.Model 子类的东西调用的 Sequelize 关联

javascript - 如何使用 jquery 为 heapbox 应用 onChange 事件?

javascript - 存储来自手动输入 URL 的 http 请求的数据

javascript - 用户预定作业

node.js - Express + Angular 路由导致无限循环+崩溃

javascript - 使用 multer 传递 memoryStorage 以用 ajax 表达,但 req.file 未定义

javascript - 使用 NW.js (Node Webkit) 执行 Windows 文件/事件

javascript - 主干模型——扩展api调用