新しいドキュメントに挿入されるデータを検証しようとしていますが、他の多くのことが必要になる前ではありません。そのため、モデル スキーマに対して配列内のオブジェクトを検証する関数を静的メソッドに追加するつもりでした。
これまでのコードは次のとおりです。
module.exports = Mongoose => {
const Schema = Mongoose.Schema
const peopleSchema = new Schema({
name: {
type: Schema.Types.String,
required: true,
minlength: 3,
maxlength: 25
},
age: Schema.Types.Number
})
/**
* Validate the settings of an array of people
*
* @param {array} people Array of people (objects)
* @return {boolean}
*/
peopleSchema.statics.validatePeople = function( people ) {
return _.every(people, p => {
/**
* How can I validate the object `p` against the peopleSchema
*/
})
}
return Mongoose.model( 'People', peopleSchema )
}
だからpeopleSchema.statics.validatePeople私は検証をしようとしているところです。私はマングースの検証ドキュメントを読みましたが、データを保存せずにモデルに対して検証する方法については述べていません。
これは可能ですか?
アップデート
ここでの回答の 1 つは、動作しているように見える適切な検証方法を示していましたが、現在はUnhandled rejection ValidationError.
データを検証するために使用される静的メソッドを次に示します(挿入せずに)
peopleSchema.statics.testValidate = function( person ) {
return new Promise( ( res, rej ) => {
const personObj = new this( person )
// FYI - Wrapping the personObj.validate() in a try/catch does NOT suppress the error
personObj.validate( err => {
if ( err ) return rej( err )
res( 'SUCCESS' )
} )
})
}
それから私はそれをテストします:
People.testValidate( { /* Data */ } )
.then(data => {
console.log('OK!', data)
})
.catch( err => {
console.error('FAILED:',err)
})
.finally(() => Mongoose.connection.close())
スキーマ ルールに従わないデータでテストすると、エラーがスローされます。ご覧のとおり、キャッチしようとしましたが、うまくいかないようです。
PS私は私の約束のためにBluebirdを使用しています