在Mongoose模型中运行一个字段的validation

我需要运行一些特定字段的validation器,而不影响模型validation状态。 如何才能做到这一点?

上下文是有一个validation钩用于validation一个字段( foo ),但它需要确保( bar )是第一个好的。

 ... bar: { required: true, type: Number, min: 2, max: 10, validator: isInteger } ... function validateFoo(foo, bar) { // the code below will throw if bar is not an integer between 2 and 10 ... } schema.pre('validate', function (next) { if (/* check if model.bar is valid */) { if (!validateFoo(model.foo, model.bar)) { model.invalidate('foo', 'foo is invalid'); } } else { model.invalidate('foo', 'foo is invalid because of bar'); } next(); }); 

如果不使用现有的bar模式validation器,将会导致WET代码:

 schema.pre('validate', function (next) { // WET! if (model.bar >= 2 && model.bar <= 10 && isInteger(model.bar)) ... } 

你应该看看这里的自定义validation器部分: http : //mongoosejs.com/docs/validation.html

这样, barvalidation器将在您的预validation钩之前运行。

另外,我不明白为什么一个领域的validation会依赖另一个领域。 也许,你应该更清楚你打算做什么。