我有一个登录的用户对象,我已经进入我的会话。用户对象是一个sequelize用户对象实例,它有许多有用的方法。
当我从会话中读回对象时,我现在拥有的只是我对象的json表示。所有有用的方法都消失了。
节点问题:是否可以将完整对象放入会话,而不仅仅是json表示?
Sequelize问题:拥有一个对象的json表示,是否可以构建一个完整的sequelize对象而无需重新查询?
答案 0 :(得分:0)
您可以分隔对象功能和数据,例如:
user.prototype.methods = userMethods;
user.prototype.data = req.session.userData
function userMethods(){
}
答案 1 :(得分:0)
我们在谈论什么样的会议?
对于Cookie会话:序列化所有内容会使客户端的标头变得庞大(慢/大请求),并且每次请求都会给您的服务器带来更多负担。
对于数据库支持的会话:您在cookie中存储一个小的session-id,然后在任何情况下都必须在数据库中查询会话对象。
使用该查询来获取完整的用户对象,方法是将用户ID保存在cookie中而不是session-id。
最后一个选项:
sequelize
中的数据实例化用户对象。我没有使用过那个ORM,但是我使用的其他ORM东西(mongoose)允许你从它的数据中实例化一个对象,这样你就可以访问你再次缺少的所有有用的方法。编辑:从文档中,我认为你可以获得会话中保存的JSON(session.user
),然后恢复这样的用户实例:
var restoredUserInstance = MyUserModel.build(session.user);
由于您的用户模型的JSON可能包含您的主键(电子邮件或用户名或其他内容),因此您可以按预期使用restoredUserInstance.save()
和所有其他方法(保存将更新等)让我知道是否这不起作用,我们可以进一步深入研究文档/代码。
我看一下,发现以下有关如何在不调用数据库find()
的情况下从JSON实例化实例的说明:https://github.com/sdepold/sequelize/issues/191