【问题标题】:Mongoose schema: validate before set猫鼬模式:设置前验证
【发布时间】:2020-11-17 01:42:44
【问题描述】:

我想在设置之前验证一个字段,但是我当前的代码在设置它之后运行验证器。有没有办法反其道而行之?

  password: { 
    type: String,
    required: true,
    validate: {
      validator: function(password) {
        return password.length > 9;
      }
    },
    set: v => encryptPassword(v)

此代码检查加密密码的长度,但我想检查未加密密码的长度。

【问题讨论】:

    标签: javascript mongoose mongoose-schema


    【解决方案1】:

    使用前置中间件

    schema.pre('save', function(next) {
      this.password = /*encrypted password algorithm*/;
      next();
    });
    

    验证器将在前置中间件之前运行,因此您在验证密码后对密码进行加密。我们使用常规的function,因为我们需要访问this,我不确定您使用的是哪种密码加密方式。

    【讨论】:

    • 我不认为我打算使用它,因为密码应该在保存到数据库之前被加密。
    • 预中间件将在文档保存到数据库之前运行。
    • 我尝试了您的代码,但它未能通过我提供的预先编写的测试。我最终在加密函数encryptPassword 中实现了验证
    • 输出是什么?您的预期输出是什么?
    • 我的输出是未加密的密码,预期的输出是加密的密码。
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2011-11-14
    • 1970-01-01
    • 2021-06-20
    • 2015-05-20
    • 2014-04-01
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多