Sequelize实例方法不起作用
我正尝试使用Sequelize的实例方法来validationlogin尝试的密码。 我已经将用户模型定义为:
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; }
在我的login路线中,我执行以下操作:
- 1)从请求体获取用户名和密码
- 2)检查用户名是否存在于数据库中
- 3)如果用户存在,则使用validatePassword方法获取用户对象,并将发送的密码与数据库中的散列密码进行比较。
这是相关的代码
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)); } ....
每次我尝试login,我得到以下错误
[TypeError: user.validatePassword is not a function]
我究竟做错了什么?
我认为你正在使用sequelize模型定义api不正确。 http://docs.sequelizejs.com/en/latest/docs/models-definition/#expansion-of-models
这是正确的方法:
var User = sequelize.define('User',{}, { classMethods: { method1: ... }, instanceMethods: { method2: ... } });
不是这样的:
var User = sequelize.define('User',{}, { classMethods: { method1: ... } },{ instanceMethods: { method2: ... } });