次のように定義されたモデルがあります。
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 を返したりすることなく成功します。
私が間違っているのは何ですか?上記の問題をどのように修正する必要がありますか?