Aar*_*lal 9 node.js sequelize.js
我正在尝试使用Sequelize的实例方法来验证登录尝试时的密码.我已将User模型定义为:
var User = sequelize.define('User',{
id:{
type:DataTypes.BIGINT,
autoIncrement: true,
allowNull: false,
primaryKey:true
},
username:{
type:DataTypes.STRING,
unique:true
},
password:{
type: DataTypes.STRING
},
...
},
{
classMethods:{
associate:function(models){
...
}
}
},
{
instanceMethods:{
validatePassword:function(password){
return bcrypt.compareSync(password, this.password);
}
}
}
);
return User;
}
Run Code Online (Sandbox Code Playgroud)
在我的登录路线中,我执行以下操作:
这是相关的代码
var username = req.body.username || "";
var password = req.body.password || "";
models.User.findOne({ where: {username: username} }).
then(
function(user) {
if(user){
console.log(user.validatePassword(password));
}
....
Run Code Online (Sandbox Code Playgroud)
每次我尝试登录时都会出现以下错误
[TypeError: user.validatePassword is not a function]
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
小智 13
对于遇到类似问题的任何人,我都遇到了同样的问题,但使用的是 Sequelize 5.21.5。根据这篇文章Sequelize Instance Methods,从 Sequelize 4.0 及更高版本开始,您必须使用原型方法来定义实例方法,如下所示:
// Adding an instance level methods.
User.prototype.validPassword = function(password) {
return bcrypt.compareSync(password, this.password);
};
Run Code Online (Sandbox Code Playgroud)
我们可以将 instanceLevelMethods 添加到原型中,
User.prototype.your-instance-level-method-name = function() {
return 'foo';
};
Run Code Online (Sandbox Code Playgroud)
我是这样做的:
// Adding an instance level methods.
User.prototype.validPassword = function(password) {
return bcrypt.compareSync(password, this.password);
};
Run Code Online (Sandbox Code Playgroud)
我认为你正在使用sequelize模型定义api错误. http://docs.sequelizejs.com/en/latest/docs/models-definition/#expansion-of-models
这是正确的方法:
var User = sequelize.define('User',{}, {
classMethods: {
method1: ...
},
instanceMethods: {
method2: ...
}
});
Run Code Online (Sandbox Code Playgroud)
不是这样的:
var User = sequelize.define('User',{}, {
classMethods: {
method1: ...
}
},{
instanceMethods: {
method2: ...
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6785 次 |
最近记录: |