3

ログインしたユーザー オブジェクトをセッションに押し込みました。ユーザー オブジェクトは Sequelize ユーザー オブジェクト インスタンスであり、多くの便利なメソッドがあります。

セッションからオブジェクトを読み返すと、オブジェクトの 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. データベースに支援されたセッションの場合: 小さなセッション ID を Cookie に保存すると、どのような場合でもセッション オブジェクトについてデータベースにクエリを実行する必要があります。

    そのクエリを使用して、セッション ID ではなくユーザー ID を Cookie に保存することにより、代わりに完全なユーザー オブジェクトを取得します。

最後のオプション:

  1. のデータからユーザー オブジェクトをインスタンス化する方法を理解してsequelizeください。私はその ORM を使用していませんが、私が使用した他の ORM のもの (マングース) を使用すると、データからオブジェクトをインスタンス化できます。これにより、欠落しているすべての便利なメソッドにアクセスできます。

編集: ドキュメントから、セッション ( ) に保存された JSON を取得し、session.user次のようにユーザー インスタンスを復元できると考えています。

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

ユーザー モデルの JSON にはおそらく主キー (電子メールまたはユーザー名など) が含まれて restoredUserInstance.save()いるため、他のすべてのメソッドを期待どおりに使用できます (保存すると更新されるなど)。それが機能しない場合はお知らせください。ドキュメント/コードをさらに掘り下げます。

DB を呼び出さずに JSON からインスタンスをインスタンス化する方法の次の説明を見て、見つけましたfind(): https://github.com/sdepold/sequelize/issues/191

于 2012-11-06T15:19:38.560 に答える