nodejs session只存储json?

时间:2012-11-06 04:43:53

标签: node.js session sequelize.js

我有一个登录的用户对象,我已经进入我的会话。用户对象是一个sequelize用户对象实例,它有许多有用的方法。

当我从会话中读回对象时,我现在拥有的只是我对象的json表示。所有有用的方法都消失了。

节点问题:是否可以将完整对象放入会话,而不仅仅是json表示?

Sequelize问题:拥有一个对象的json表示,是否可以构建一个完整的sequelize对象而无需重新查询?

2 个答案:

答案 0 :(得分:0)

您可以分隔对象功能和数据,例如:

user.prototype.methods = userMethods;
user.prototype.data = req.session.userData

function userMethods(){

}

答案 1 :(得分:0)

我们在谈论什么样的会议?

  1. 对于Cookie会话:序列化所有内容会使客户端的标头变得庞大(慢/大请求),并且每次请求都会给您的服务器带来更多负担。

  2. 对于数据库支持的会话:您在cookie中存储一个小的session-id,然后在任何情况下都必须在数据库中查询会话对象。

    使用该查询来获取完整的用户对象,方法是将用户ID保存在cookie中而不是session-id。

  3. 最后一个选项:

    1. 了解如何从sequelize中的数据实例化用户对象。我没有使用过那个ORM,但是我使用的其他ORM东西(mongoose)允许你从它的数据中实例化一个对象,这样你就可以访问你再次缺少的所有有用的方法。
    2. 编辑:从文档中,我认为你可以获得会话中保存的JSON(session.user),然后恢复这样的用户实例:

      var restoredUserInstance = MyUserModel.build(session.user);
      

      由于您的用户模型的JSON可能包含您的主键(电子邮件或用户名或其他内容),因此您可以按预期使用restoredUserInstance.save()和所有其他方法(保存将更新等)让我知道是否这不起作用,我们可以进一步深入研究文档/代码。

      我看一下,发现以下有关如何在不调用数据库find()的情况下从JSON实例化实例的说明:https://github.com/sdepold/sequelize/issues/191