【问题标题】:Sequelize - how do I partially validate when updating?Sequelize - 更新时如何进行部分验证?
【发布时间】:2014-01-28 16:54:52
【问题描述】:

更新时,Sequelize 对所有字段/属性执行验证(除了那些将 allowNull 设置为 true 的字段) - 即使仅修改了部分字段(通过 updateAttributes)。是否可以仅验证要更新的那些字段?也就是说,要部分验证模型实例?

我有以下用户表:

create table users (
    id serial primary key,
    email varchar(192) not null,
    username varchar(32) not null,
    password char(32) not null,

    unique(username)
);

模型定义:

// Inside User model definition:
email: { ... },
username: { ... },
password: {
    type: DataTypes.STRING,
    validate: {
        is: {
            // Reference: http://stackoverflow.com/a/1559788
            args: ['(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[-+_!@#$%^&*.,?]).+'],
            msg: "Password must contain one at least one uppercase, lowercase, number, and special character"
        }
    }
},

在创建和检索用户记录时一切正常。不幸的是,当我尝试更新现有用户的电子邮件地址时,密码验证失败。发生这种情况是因为我存储了每个用户密码的散列版本(十六进制摘要),其中不包含任何特殊字符(验证所需)。

一种可能的解决方法是仅在创建用户时应用此验证;但是,这会引入验证用户何时更改密码的问题。

理想情况下,密码验证只会在创建新用户或更新现有用户的密码字段时应用。有什么想法吗?

【问题讨论】:

    标签: javascript node.js validation orm sequelize.js


    【解决方案1】:

    您可能希望使用未存储在数据库中的具有virtual 数据类型的新字段来执行验证。见:http://docs.sequelizejs.com/en/latest/api/datatypes/#virtual

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      相关资源
      最近更新 更多