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: ... } });