2014-06-29 3 views

ответ

3

Конечно, вы можете, используя промежуточное программное обеспечение Mongoose в. Если вам нужна некоторая форма пользовательской проверки, вы можете просто подключить ее к доступным крючкам. Общая валидация имеет место «pre save», поэтому есть хорошее место, чтобы положить крючок.

Как полный пример:

var async = require('async'), 
    mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

mongoose.connect('mongodb://localhost/test'); 

var testSchema = new Schema({ 
    x: Number, 
    y: Number 
}); 

testSchema.pre('save', function(next) { 
    if (this.x && !this.y) { 
    return next(new Error("y is required when x is set")); 
    } 
    next(); 
}); 

var Test = mongoose.model("Test", testSchema, "test"); 

async.series(
    [ 
    function(callback) { 
     var test = new Test({ y: 1 }); 
     test.save(function(err,test) { 
     if (err) { 
      console.log(err); 
     } else { 
      console.log("test1: ok"); 
     } 
     console.log("y only expected to work"); 
     callback(); 
     }); 
    }, 
    function(callback) { 
     var test = new Test({ x: 1 }); 
     test.save(function(err,test) { 
     if (err) { 
      console.log(err); 
     } else { 
      console.log("test2: ok"); 
     } 
     console.log("x only expected to fail"); 
     callback(); 
     }); 
    }, 
    function(callback) { 
     var test = new Test({ x: 1, y: 1}); 
     test.save(function(err,test) { 
     if (err) { 
      console.log(err); 
     } else { 
      console.log("test3: ok"); 
     } 
     console.log("x and y is fine"); 
     callback(); 
     }); 
    } 
    ] 
); 

Таким образом, крюк, который был сделан на определении схемы может проверить содержимое полей, передаваемых в и определить, действительно ли те, соответствовать правилам, которые вы определили. В этом случае вы всегда ищете значение «y», когда будет определено «x». Это означает, что «y» само по себе прекрасно, а «x» и «y» вместе соответствуют правилу, но «y» само по себе без «x» приведет к ошибке.

См. middleware в документации, а также validation для фактической проверки значений, заданных для данного поля.

Смежные вопросы