我有一个定义如下的模型:
var userTableConfig = {
username: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
validate: {
len: [5, 30],
is: ['[a-z0-9_]', 'i']
}
},
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true,
len: [5, 30]
}
},
............. // Other fields
}
var userConfig = userConfig = {
underscored: true,
instanceMethods: {
..............
}
}
var User = seq.define('User', userTableConfig, userConfig);
现在当我使用这个模型如下:
u = User.build();
u.username = this.param('username'); // Contains empty string
u.setPassword(this.param('password')); // Contains empty string
u.email = this.param('email');
u.activation_state = 'pending';
if (u.validate()) {
console.log("Validation succeeded");
} else {
console.log("Validation failed");
console.log(u.errors);
.............
}
尽管没有满足长度限制,但验证器很高兴地成功了,我Validation succeeded
在控制台中看到了。
更进一步,我还可以推送不应该由正则表达式约束验证的任意随机字符,并且验证器也很乐意接受它们。
因此,我决定检查验证器是否正在运行,并尝试使用自定义验证器进行检查:
userTableConfig = {
username: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
validate: {
randomValidator: function() {
console.log("===========> validator executed");
throw new Error('Hell with validation');
return false;
},
len: [5, 30],
is: ['[a-z0-9_]', 'i']
}
},
......
}
具有讽刺意味的是,方法 randomValidator 确实被执行了,而 validate 方法却成功了,没有抛出任何错误或返回 false。
我做错了什么,应该如何纠正上述问题?