Sequelize,自定义设置器,未设置

布雷特·瓦格纳

不幸的是,模型属性设置器和获取器的文档有些不足,我很难让我的小设置器正常工作。

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问题的信息可以看出,属性的自定义设置器不会在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被正确调用,并且在password属性上设置了哈希值。但是,一旦设置器结束并且我返回到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);
        }
    }
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义ArrayAdapter的筛选器未设置

来自分类Dev

未设置Google Analytics(分析)自定义维度

来自分类Dev

$ _SERVER变量未设置我的自定义标头

来自分类Dev

启动屏幕可能未设置自定义类名

来自分类Dev

WinRT XAML中未设置自定义VisualState

来自分类Dev

自定义维度值总是显示为未设置

来自分类Dev

使用自定义 ItemTemplate 时未设置 ComboBox SelectedItem

来自分类Dev

ActiveModel验证自定义设置器

来自分类Dev

使用自定义设置器或KVO

来自分类Dev

$ watch与自定义设置器方法

来自分类Dev

在样式设置器中设置自定义附加属性

来自分类Dev

自定义设置器但自动获取器

来自分类Dev

结构中的自定义获取器和设置器

来自分类Dev

Laravel中的自定义设置器和获取器

来自分类Dev

在应用到单元之前未设置自定义集合视图布局属性

来自分类Dev

Magento自定义软件包未设置文件权限正确

来自分类Dev

使用自定义模型绑定时,对象引用未设置为对象的实例

来自分类Dev

报告未设置自定义维度(或为空)的所有事件

来自分类Dev

Google Analytics(分析)获取未设置自定义维度的记录

来自分类Dev

当自定义名称空间为对象时,未设置默认的argparse参数值

来自分类Dev

自定义UIView类的属性在调用并添加到UIScrollview时未设置

来自分类Dev

GTM 覆盖了 Analytics 自定义事件?EventLabel 总是“(未设置)”

来自分类Dev

设置自定义UINavigationBar

来自分类Dev

设置自定义属性

来自分类Dev

列表视图设置自定义波纹选择器

来自分类Dev

为我的变量编写自定义设置器-Swift

来自分类Dev

AngularJS麻烦并设置了自定义中继器指令

来自分类Dev

从终端设置iOS模拟器自定义位置

来自分类Dev

序列化器设置自定义值

Related 相关文章

  1. 1

    自定义ArrayAdapter的筛选器未设置

  2. 2

    未设置Google Analytics(分析)自定义维度

  3. 3

    $ _SERVER变量未设置我的自定义标头

  4. 4

    启动屏幕可能未设置自定义类名

  5. 5

    WinRT XAML中未设置自定义VisualState

  6. 6

    自定义维度值总是显示为未设置

  7. 7

    使用自定义 ItemTemplate 时未设置 ComboBox SelectedItem

  8. 8

    ActiveModel验证自定义设置器

  9. 9

    使用自定义设置器或KVO

  10. 10

    $ watch与自定义设置器方法

  11. 11

    在样式设置器中设置自定义附加属性

  12. 12

    自定义设置器但自动获取器

  13. 13

    结构中的自定义获取器和设置器

  14. 14

    Laravel中的自定义设置器和获取器

  15. 15

    在应用到单元之前未设置自定义集合视图布局属性

  16. 16

    Magento自定义软件包未设置文件权限正确

  17. 17

    使用自定义模型绑定时,对象引用未设置为对象的实例

  18. 18

    报告未设置自定义维度(或为空)的所有事件

  19. 19

    Google Analytics(分析)获取未设置自定义维度的记录

  20. 20

    当自定义名称空间为对象时,未设置默认的argparse参数值

  21. 21

    自定义UIView类的属性在调用并添加到UIScrollview时未设置

  22. 22

    GTM 覆盖了 Analytics 自定义事件?EventLabel 总是“(未设置)”

  23. 23

    设置自定义UINavigationBar

  24. 24

    设置自定义属性

  25. 25

    列表视图设置自定义波纹选择器

  26. 26

    为我的变量编写自定义设置器-Swift

  27. 27

    AngularJS麻烦并设置了自定义中继器指令

  28. 28

    从终端设置iOS模拟器自定义位置

  29. 29

    序列化器设置自定义值

热门标签

归档