防止空文件被保存

我有一个使用Mongoose和三个字段的架构设置。 没有一个是必需的,但我想确保三个字段中的至less一个填充,以防止空文件被保存(理想情况下,实际上我想确保至lessfirstsecond字段填充)。 什么是最好的方法来做到这一点? 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);