【问题标题】:Keeping track of users history in express to make a 'back' button?快速跟踪用户历史记录以制作“后退”按钮?
【发布时间】:2022-01-02 08:20:12
【问题描述】:

我正在制作一个快速应用程序,我想在应用程序 UI 中包含一个“后退”按钮,该按钮基本上与浏览器后退按钮的作用完全一样。

我尝试在服务器中保存一个数组变量,该变量仅收集所有访问的 URL 参数。例如,对于'/:lang' 路由...

const browsingHistory = [];

app.get("/:lang", (req, res) => {
  const lang = req.params.lang;
  if (lang === "en" || lang === "fr") {
    const templateVars = {
      menuItems: db[lang].menuItems,
      lang,
    };
    res.render("root", templateVars);
  }
  if (lang !== "favicon.ico") {
    browsingHistory.push(lang);
    console.log(`Browsing history: ${browsingHistory}`);
  }
});

但我意识到这仅在本地托管时才有效——一旦部署,如果同时有多个用户,如何跟踪每个用户的个人历史记录?或者有更好的方法吗?

【问题讨论】:

  • 我有点困惑:express 是你的服务器,它本身没有 UI。什么 client 正在连接到您的服务器?因为那是应该维护导航历史的东西(因为这就是导航的原因)。不表达。

标签: node.js express back multiple-users


【解决方案1】:

存储浏览历史记录需要用户会话。对于每个请求,您都必须将用户点击的路线存储在他们的会话变量中。

在 Express 中,这可以通过 express-session 库来完成。您将希望使用一些以空数组开头的 history 属性来启动每个会话。设置 express-session 后,您可以执行类似于以下的操作

app.get("/:lang", (req, res) => {
  const lang = req.params.lang;
  req.session.history.push(lang);

  ...
});

app.get("/getMyPageHistory", (req, res) => {
  res.send(req.session.history);
});

req.session 对于每个用户都是唯一的。因此,您可以将每个用户的唯一历史记录存储在此变量中。

话虽如此,如果您沿着这条路线走,您最终将需要一些外部会话存储。默认情况下,会话保存在服务器的内存中。这引入了一些在 express-session 文档中解释的问题。这是他们的警告

警告 默认的服务器端会话存储 MemoryStore 故意不是为生产环境设计的。它在大多数情况下都会泄漏内存,不会扩展到单个进程之外,并且适用于调试和开发。

他们提供list of compatible session stores

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多