Mongo 月架构验证
Mongo month schema validation
我需要验证用户 select 2(FEB) 月份是否应该只输入 dayOfMonth <= 28
如何验证
我的模式如下所示
date: {
months: {
type: String,
required: true,
validate: [validatorMonths, 'allowed session values are * and 0 to 11']
},
dayOfMonth: {
type: String,
required: true,
validate: [validatorDayOfMonth, 'allowed day of month values are * and 1 to 31']
} }
function validatorDayOfMonth(v) {
return ((v == '*') || (v >= 1 && v <= 31)); };
function validatorMonths(v) {
return ((v == '*') || (v >= 0 && v <= 11)); };
您可以使用 Date 检查返回的日期是否等于提供的日期:
function validatorDayOfMonth(v) {
// Obviously replace the year with the correct value to account for leap years.
// Within a validation function `this` refers to the root document being validated.
return ((v === '*') || new Date(2015, this.date.months, v).getDate() === v);
};
这是可行的,因为 Date 构造函数会自动将额外的 days/months 更正为适当的日期。
new Date(2015, 1, 29).getDate() // 1
或者您可以使用 Moment 做同样的事情(尽管这可能有点矫枉过正)。
我认为您需要利用 mongooose 中间件进行验证。它允许您挂钩一个事件,您可以调用预保存并访问整个模式 http://mongoosejs.com/docs/api.html#document_Document-validate
你可以做类似
doc.pre('save', function(next) {
if(this.months === "2") {
this.days <= 28 && this.days >= 1 ? next() : next("Error message");
else {
this.days <= 31 && this.days >= 1 ? next() : next("Error message");
}
我需要验证用户 select 2(FEB) 月份是否应该只输入 dayOfMonth <= 28
如何验证
我的模式如下所示
date: {
months: {
type: String,
required: true,
validate: [validatorMonths, 'allowed session values are * and 0 to 11']
},
dayOfMonth: {
type: String,
required: true,
validate: [validatorDayOfMonth, 'allowed day of month values are * and 1 to 31']
} }
function validatorDayOfMonth(v) {
return ((v == '*') || (v >= 1 && v <= 31)); };
function validatorMonths(v) {
return ((v == '*') || (v >= 0 && v <= 11)); };
您可以使用 Date 检查返回的日期是否等于提供的日期:
function validatorDayOfMonth(v) {
// Obviously replace the year with the correct value to account for leap years.
// Within a validation function `this` refers to the root document being validated.
return ((v === '*') || new Date(2015, this.date.months, v).getDate() === v);
};
这是可行的,因为 Date 构造函数会自动将额外的 days/months 更正为适当的日期。
new Date(2015, 1, 29).getDate() // 1
或者您可以使用 Moment 做同样的事情(尽管这可能有点矫枉过正)。
我认为您需要利用 mongooose 中间件进行验证。它允许您挂钩一个事件,您可以调用预保存并访问整个模式 http://mongoosejs.com/docs/api.html#document_Document-validate
你可以做类似
doc.pre('save', function(next) {
if(this.months === "2") {
this.days <= 28 && this.days >= 1 ? next() : next("Error message");
else {
this.days <= 31 && this.days >= 1 ? next() : next("Error message");
}