我想了解sequelize实例方法是如何工作的,以及是否可以将返回的对象用作实例以供进一步使用。基本上我只是按用户名选择用户,稍后我想比较密码是否匹配,如果是,则更新数据。但错误说
未处理拒绝TypeError:user_data.validPassword不是函数
我甚至不接近实例更新..
我的用户模型:
const bcrypt = require('bcryptjs');
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
user_name: DataTypes.STRING,
user_password: DataTypes.STRING,
user_token: DataTypes.STRING,
user_alias_name: DataTypes.STRING,
}, {
tableName: 'oc_users',
instanceMethods: {
generateHash(password) {
return bcrypt.hash(password, bcrypt.genSaltSync(8));
},
validPassword(password) {
return bcrypt.compare(password, this.password);
}
}
});
return User;
};
我的方法:
...
loginAttempt(cookie) {
return models.User.findOne({
attributes: ['id', 'user_password', 'user_alias_name'],
where: {user_name: this.user}
}).then(user_data => {
if (!user_data) return 'No matching results for such a user';
return user_data.validPassword(this.password).then(result => {
if (result !== true) return 'Invalid password for selected user';
return this.updateAfterLogin(user_data, cookie);
})
})
}
updateAfterLogin(user, cookie) {
return user.update({
user_token: cookie
}).then(()=> {
return {data: 'updated'};
})
}
...
答案 0 :(得分:1)
这取决于你使用的续集版本和可能使用Sequelize v4的版本。 On Sequelize v4 classMethods和instanceMethods已从sequelize.define中删除。
您可以在官方文档中查看更多信息: http://docs.sequelizejs.com/manual/tutorial/upgrade-to-v4.html#config-options
从sequelize.define中删除了classMethods和instanceMethods选项。 Sequelize模型现在是ES6类。您可以像这样设置类/实例级方法
<强>旧强>
const Model = sequelize.define('Model', {
...
}, {
classMethods: {
associate: function (model) {...}
},
instanceMethods: {
someMethod: function () { ...}
}
});
新强>
const Model = sequelize.define('Model', {
...
});
// Class Method
Model.associate = function (models) {
...associate the models
};
// Instance Method
Model.prototype.someMethod = function () {..}