cal*_*rae 4 database model node.js sequelize.js
我正在尝试检查用户名是否唯一,我认为我需要自定义验证.我编写了下面的代码,但它没有返回返回的数组中.validate()的错误,而是抛出错误,这不是文档中描述的行为,而不是我想要的.
var User = sequelize.define('User', {
username: {
type: DataTypes.STRING,
validate: {
isUnique: function (username) {
User.find({ where: { username: username }})
.done(function (err, user) {
if (err) {
throw err;
}
if (user) {
throw new Error('Username already in use');
}
});
}
}
},
Run Code Online (Sandbox Code Playgroud)
您正在进行的验证是异步的.您调用该User.find方法,然后返回验证方法.Sequelize无法知道你在验证中做了异步,除非你这么说.一旦你的查找调用完成,你就抛出错误,但验证已经完成,所以没有代码来捕获该错误,这意味着错误被抛出并崩溃应用程序
告诉sequelize你正在做异步的方法是对你的函数采取第二个参数,这是一个回调.如果在没有任何参数的情况下调用回调,则验证成功,如果给它一个参数,则验证失败.
var User = sequelize.define('User', {
username: {
type: DataTypes.STRING,
validate: {
isUnique: function (username, done) {
User.find({ where: { username: username }})
.done(function (err, user) {
if (err) {
done(err);
}
if (user) {
done(new Error('Username already in use'));
}
done();
});
}
}
},
Run Code Online (Sandbox Code Playgroud)
你能否指出我误导你的文件部分,然后我们可以纠正它:)