1. Validator
Mongooseではバリデーション機能として次のようなビルトインバリデータを提供します。- required
- 最大/最小(数値)
- enum/マッチング(文字列)
var userSchema = mongoose.Schema({ uid : { type: String, required:true, index: {unique:true} }, name: { first: String, last: String }, age : { type: Number, min: 1 }, gender : { type: String, enum: genders } });
です。これに、以下のドキュメントを作成します。
User.create( { name: {first: 'KAT', last: 'INTINK'}, age: 100, gender: 'male' },(以下省略)
uidを指定していないため、requiredにひっかかり以下のようなエラーとなります。
{ message: 'Validation failed', name: 'ValidationError', errors: { uid: { message: 'Validator "required" failed for path uid', name: 'ValidatorError', path: 'uid', type: 'required' } } }
次に、ageを-1にしてみます。
User.create( { uid: 'kat', name: {first: 'KAT', last: 'INTINK'}, age: -1, gender: 'male' }, (以下省略)
minにひっかかり以下のようなエラーとなります。
{ message: 'Validation failed', name: 'ValidationError', errors: { age: { message: 'Validator "min" failed for path age', name: 'ValidatorError', path: 'age', type: 'min' } } }
genderにenum以外の値、manを指定してみます。
User.create( { uid: 'kat', name: {first: 'KAT', last: 'INTINK'}, age: 100, gender: 'man' }, (以下省略)
同様に以下のエラーとなります。
{ message: 'Validation failed', name: 'ValidationError', errors: { gender: { message: 'Validator "enum" failed for path gender', name: 'ValidatorError', path: 'gender', type: 'enum' } } }
また、カスタムバリデータとして以下のように定義することも可能です。
var userSchema = mongoose.Schema({ uid : { type: String, required:true, index: {unique:true} }, name: { first: {type: String, validate: [function(fname) { return fname.length < 5; }, 'MaxNameLength'] }, last: String }, age : { type: Number, min: 1 }, gender : { type: String, enum: genders } });
firstnameが5以上だとMaxNameLengthにひっかかります。試しに以下のドキュメントを作成します。
User.create( { uid: 'kat', name: {first: 'KATXX', last: 'INTINK'}, age: 100, gender: 'male' }, (以下省略)
以下のようにエラーが発生しました。
{ message: 'Validation failed', name: 'ValidationError', errors: { 'name.first': { message: 'Validator "MaxNameLength" failed for path name.first', name: 'ValidatorError', path: 'name.first', type: 'MaxNameLength' } } }
バリデーション機能は便利というよりほぼ必須機能になってますが、上記のように簡単に提供された機能を使って実現することができます。
0 件のコメント:
コメントを投稿