有人可以帮我弄清楚如何在我的控制器上使用我的sequelize
实例方法吗?
我这样写了我的模型:
const bcrypt = require('bcryptjs');
module.exports = (sequelize, Sequelize) => {
const Patient = sequelize.define('Patient', {
email: {
type: Sequelize.STRING,
allowNull: false,
},
password : {
type: Sequelize.STRING,
allowNull: false,
},
}, {
classMethods: {
associate: (models) => {
// associations can be defined here
}
},
instanceMethods: {
generateHash: function (password) {
return bcrypt.hash(password, 8, function(err, hash){
if(err){
console.log('error'+err)
}else{
return hash;
}
});
},
validPassword: function(password) {
return bcrypt.compareSync(password, this.password);
}
}
});
return Patient;
};
但是当我在我的控制器上启动它时,我就这样做了
const jwt = require('jsonwebtoken');
const passport = require('passport');
const Patient = require('../models').Patient;
module.exports = {
///
create(req, res) {
return Patient
.create({
email: req.body.email,
password: Patient.prototype.generateHash(req.body.password)
})
.then(patient => res.status(201).send(patient))
.catch(error => res.status(400).send(error));
},
};
我收到了请求的错误:
TypeError:无法读取属性' generateHash'未定义的
答案 0 :(得分:0)
首先,您应该使用bcrypt.hashSync()
,因为您想要为password
分配异步函数调用 - 它不会起作用。
generateHash: function(password){
try {
return bcrypt.hashSync(password, 8);
} catch (e) {
console.log('error: ' + e);
}
}
为了使用实例方法,你应该做
Patient.build().generateHash(req.body.password);
build()
创建新的模型实例,然后您可以运行实例方法。或者您可以将generateHash
声明为类方法,以便您可以像那样运行它
Patient.generateHash(req.body.password);