gpt4 book ai didi

node.js - Sequelize,自定义setter,不设置

转载 作者:搜寻专家 更新时间:2023-10-31 22:56:50 24 4
gpt4 key购买 nike

不幸的是,模型属性 setter 和 getter 的文档有些不足,我无法让我的小 setter 工作。

var bcrypt = require('bcrypt');

module.exports = function( sequelize, DataTypes )
{
var User = sequelize.define('User', {
username: { type:DataTypes.STRING, unique: true, allowNull: false },
email: { type:DataTypes.STRING, allowNull: false, unique: true },
userlevel: { type:DataTypes.INTEGER, allowNull:false, defaultValue:0 },
password: { type:DataTypes.STRING,
set: function(v) {
var pw = this;
var r;
bcrypt.genSalt(10, function(err,salt) {
bcrypt.hash(v, salt, function(err,hash) {
pw.setDataValue('password', hash);
});
});
} }
});



return User;
}

现在根据 github 问题我可以告诉你,属性上的自定义 setter 不会在 create() 上调用,所以调用

db.User.create( { username:'guest', email:'guest@guest', userlevel:1, password:'guest' } ).success( function(record) { console.log(record) });

结果如下:

Executing (default): INSERT INTO `Users` (`id`,`username`,`email`,`userlevel`,`createdAt`,`updatedAt`) VALUES (DEFAULT,'guest','guest@guest',100,'2014-02-25 01:05:17','2014-02-25 01:05:17');

所以我继续在成功子句中添加以下内容:

u.set('password', 'stupid');
u.save();

我可以看到我的 setter 被正确调用并且散列被设置在密码属性上。然而,一旦 setter 结束并且我返回到我的 u.save() 行,u 对象就回到了它之前的状态,没有设置密码。

有什么想法吗?

最佳答案

您遇到此问题是因为 getter 和 setter 目前仅支持同步操作。说到这里,您可以在这里找到一个可行的解决方案:

var User = sequelize.define('User', {
username: { type: DataTypes.STRING, allowNull: false, unique: true },
email: { type: DataTypes.STRING, allowNull: false, unique: true },
userlevel: { type: DataTypes.INTEGER, allowNull:false, defaultValue:0 },
password: {
type: Sequelize.STRING,
set: function(v) {
var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync(v, salt);

this.setDataValue('password', hash);
}
}
})

关于node.js - Sequelize,自定义setter,不设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22002698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com