3

我有一个已登录的用户对象,我将其推送到我的会话中。user 对象是一个 sequelize user 对象实例,它上面有很多有用的方法。

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

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

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

4

2 回答 2

0

您可以分离对象函数和数据,例如:

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

function userMethods(){

}
于 2012-11-06T06:54:05.443 回答
0

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

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

  2. 对于数据库支持的会话:您在 cookie 中存储了一个小的会话 ID,那么无论如何您都必须在数据库中查询会话对象。

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

最后一个选项:

  1. 弄清楚如何从sequelize. 我没有使用过那个 ORM,但是我使用过的其他 ORM 东西(猫鼬)可以让您从对象的数据中实例化一个对象,这将使您能够访问您再次缺少的所有有用方法。

编辑:从文档中,我认为您可以获取保存在会话(session.user)中的 JSON,然后像这样恢复用户实例:

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

由于您的用户模型的 JSON 可能包含您的主键(电子邮件或用户名或其他内容),因此您可以 restoredUserInstance.save()按预期使用所有其他方法(保存将更新等)如果这不起作用,请告诉我,我们可以进一步挖掘文档/代码。

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

于 2012-11-06T15:19:38.560 回答