22

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

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

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

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

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

よろしく

4

3 に答える 3

35

Schema.pre('save', callback)関数では、this保存されているドキュメントと、呼び出す前にドキュメントに加えられた変更によって、保存されているnext()ものが変更されます。

于 2012-07-04T14:48:36.907 に答える
29

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

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

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

https://mongoosejs.com/docs/tutorials/getters-setters.html

于 2012-07-05T07:13:25.337 に答える
17
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);
于 2013-06-05T13:49:13.727 に答える