防止空文件被保存
我有一个使用Mongoose和三个字段的架构设置。 没有一个是必需的,但我想确保三个字段中的至less一个填充,以防止空文件被保存(理想情况下,实际上我想确保至lessfirst
或second
字段填充)。 什么是最好的方法来做到这一点? pre('save')
看起来像一个选项,但认为应该有一个内置的方式来做到这一点。
var mySchema = new Schema({ first: { type: String, trim: true }, second: { type: String, trim: true }, third: { type: Number, min: 1 } }, { timestamps: true }); var My = mongoose.model('My', mySchema);
您可以像上面提到的那样pre('save')
,或者在一个字段上进行validation
,以检查下面给出的条件。
var validateLocalStrategyProperty = function(property) { return this.first || this.second || this.third); }; var mySchema = new Schema({ first: { type: String, trim: true, validate: [validateLocalStrategyProperty, 'Please fill at least one field'] }, second: { type: String, trim: true }, third: { type: Number, min: 1 } }, { timestamps: true }); var My = mongoose.model('My', mySchema);
Pre方法最适合这种用例。
mySchema.pre('save', function(next) { var self = this; if(self.first || self.second || self.third) { next(); } else { next(new Error('At leat one of the filed should be there')) } }
您还介绍了一个可以validation您的请求并调用路由中的下一个函数的中间件。
您可以为字段input为空时将使用的字段设置默认值。
var mySchema = new Schema({ first: { type: String, trim: true, default: 'your string or something' }, second: { type: String, trim: true, default: 'your string or something' }, third: { type: Number, min: 1 } }, { timestamps: true }); var My = mongoose.model('My', mySchema);