需要在应用程序中存储最近访问的页面列表,类似于窗口中最近打开的文件列表。对此,最好的方法是什么?
这取决于许多因素,特别是如果您的应用程序是否具有基于用户的系统。
如果你的应用程序有用户帐户的概念:
对于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']