假设用户输入,我将使用统一的方法来验证我的模式,因此不仅在保存/更新上应用内置的验证,而且还在find()等上应用内置的验证。
var User = mongoose.model("User", new Schema({
name: {type: String, minlength: 5, maxlength: 128, required: true, unique: true});
}));我想要的是每次运行验证器,然后再用猫鼬运行查询,以确保用户输入符合全局模式规则。
在我的路线上是这样的:
var username = $.get["username"], //An input from GET querystring
User = mongoose.model("User");
User.validate({name: username}, function(err) {
if (err) return console.log("not valid input"); //i.e. too short
//run query if valid
});是否有插件(假设我没有使用Express),或者其他已经包含在猫鼬中的插件?
发布于 2016-01-06 10:48:39
文档:默认情况下,在猫鼬中支持http://mongoosejs.com/docs/validation.html。如果在每次保存操作之前都要查找泛型验证,则可以指定要验证的字段path和验证validate(function(valueEntered, howToRespond)。如果验证未通过,则将引发错误,如下面的示例所示。
示例:为了方便起见,使用了蓝鸟。以下代码段将在每次保存操作之前验证电子邮件。
var mongoose = require('bluebird').promisifyAll(require('mongoose'));
var Schema = mongoose.Schema;
var UserSchema = new Schema({
name: String,
email: {
type: String,
lowercase: true
},
password: String,
});
UserSchema
.path('email')
.validate(function(value, respond) {
var self = this;
return this.constructor.findOneAsync({ email: value })
.then(function(user) {
if (user) {
if (self.id === user.id) {
return respond(true);
}
return respond(false);
}
return respond(true);
})
.catch(function(err) {
throw err;
});
}, 'The specified email address is already in use.');
https://stackoverflow.com/questions/34629013
复制相似问题