web-dev-qa-db-ja.com

マングースODM、保存する前に変数を変更する

ユーザードキュメント用にMongooseを使用してモデルレイヤーを作成したいのですが、これは次のことを行います。

  1. 検証(一意、長さ)
  2. 正規化(ユーザー名と電子メールは一意性をチェックするために小文字に変換されます)
  3. 塩の生成
  4. パスワードハッシュ
  5. (ロギング)

これらのアクションはすべて、データベースに永続化する前に実行する必要があります。幸い、マングースは検証、プラグイン、ミドルウェアをサポートしています。

悪いことは、私がその主題について良い資料を見つけることができないということです。 mongoosejs.comの公式ドキュメントは短すぎます...

Mongoose(または存在する場合はすべてを実行する完全なプラグイン)を使用した事前アクションについての例はありますか?

よろしく

18
dev.pus

Schema.pre('save', callback)関数では、thisは保存されているドキュメントであり、next()を呼び出す前に変更を加えると保存内容が変更されます。

33
JohnnyHK

別のオプションは、ゲッターを使用することです。これがウェブサイトからの例です:

function toLower (v) {
  return v.toLowerCase();
}

var UserSchema = new Schema({
  email: { type: String, set: toLower } 
});

http://mongoosejs.com/docs/getters-setters.html

18
bento
var db = require('mongoose');
var schema = new db.Schema({
  foo:     { type: String }
});

schema.pre('save', function(next) {
  this.foo = 'bar';

  next();
});

db.model('Thing', schema);
14
Rich Apodaca