首页 > 解决方案 > Mongoose model.pre('save'), isModified, bcrypt

问题描述

我想知道下面的代码是如何工作的。在我看来,在给定的代码中 isModified 方法比较 clearText 和 hashedPassword 所以它应该总是返回 true

const userSchema = new mongoose.Schema({
password: {
    type: String,
    required: true
}
});

userSchema.pre("save", async function(next) {
  try {
      if (!this.isModified("password")) {
        return next();
      }
      let hashedPassword = await bcrypt.hash(this.password, 10);
      this.password = hashedPassword;
      return next();
  } catch (err) {
      return next(err);
 }
});

标签: mongodbmongoose

解决方案


isModified仅当您更改密码时才会返回 true。

因此,如果用户进行密码重置/更改或者他们是第一次设置它,这将被触发。

例如,如果用户的名称被更改,它将不会被触发。

您可以在此处阅读更多信息isModifiedhttps ://mongoosejs.com/docs/api.html#document_Document-isModified


推荐阅读