如何在sails中存储最近访问的页面/路线



需要在应用程序中存储最近访问的页面列表,类似于窗口中最近打开的文件列表。对此,最好的方法是什么?

这取决于许多因素,特别是如果您的应用程序是否具有基于用户的系统。

如果你的应用程序有用户帐户的概念:

对于User模型,添加一个额外的属性recentPages: {type: 'ARRAY', defaultsTo: [] }。无论在哪里处理用户的登录会话,都应该将req.session.user设置为当前用户的实例。

然后在/api/policies文件夹中创建一个全局策略trackUsers.js

module.exports = function(req, res, next) {
  if (req.session.user) {
    req.session.user.recentPages.append(req.url);
    req.session.user.save(function (err) {
      return next();
    });
  } else {
    return next();
  }
};

当您想访问用户最近的页面时,只需从user.recentPages中获取即可。您可以通过在策略中进行快速检查并删除元素来限制添加的页数;Waterline ORM也对名为maxLength的模型进行了验证。


如果你的应用程序没有,那么你可以改为通过IP地址进行跟踪。这风险更大,但这是我能想到的唯一解决方法(由于共享IP,动态IP会使此功能不准确)。

您将在/api/models中创建一个名为User的新模型,该模型具有属性ipAddress: { type: 'STRING', ip: true, primary: true }和另一个属性recentPages: {type: 'ARRAY', defaultsTo: [] }

然后在/api/policies文件夹中创建一个全局策略trackUsers.js

module.exports = function(req, res, next) {
  User.find(req.ip, function foundUser (err, user) {
    if (!err && user) {
      user.recentPages.append(req.url);
      user.save(function (err) {
        return next();
      });
    } else {
      return next();
    }
  });
};

您可以通过使用客户端获取的IP在User模型上进行查找来访问IP地址的最近页面。确保无论使用哪种方法,都将策略添加到config/policies.js:'*': ['trackUsers']

最新更新