【问题标题】:.save() with save pre hook won't work with Mongoose.save() 与 save pre hook 不适用于 Mongoose
【发布时间】:2021-01-08 21:34:18
【问题描述】:

所以过去几天我一直在努力解决这个问题。

我在 Mongoose 中创建了一个用户模式,并且我有一个预先保存的钩子来散列它的密码字段。每次我尝试将用户保存到数据库时,我注意到 save 方法从未被调用过。我收到的错误消息对我来说毫无意义(当时)。事实证明,它与预保存挂钩无关,而与架构本身有关。

const UserSchema = new mongoose.Schema(
  {
    fullName: {
      type: String,
      maxlength: 50
    },
    about: {
      type: String,
      maxlength: 500
    },
    gender: {
      type: String,
    },
    dob: {
      type: String,
    },
    school: {
      type: String,
    },
    grade: {
      type: String,
      maxlength: 50
    },
    profilePicture: {
      type: String,
    },
    resume: {
      type: String,
    },
    email: {
      type: String,
      maxlength: 50
    },
    password: {
      type: String,
      minlength: 6
    },
    favoriteJobs: {
      type: Array,
      default: []
    },
    followedPost: {
    type: Array,
    default: []
    },
    posts: {
    type: Array,
    default: []
    },
    eventsGoing: {
    type: Array,
    default: []
    },
    studentChat: {
    type: Array,
    default: [StudentChatSchema]
    },
    mentorChat: {
    type: Array,
    default: []
    },
    notifications: {
    type: Array,
    default: []
    },
})

预存:

UserSchema.pre('save', function(next){
  var user = this;
  if (!user.isModified('password')) return next();

  bcrypt.genSalt(10, (err, salt) => {
    if (err) return next(err);

    bcrypt.hash(user.password, salt, (err, hash) => {
      if (err) return next(err);
      if(hash) {
        user.password = hash;
        this.password = user.password;
        console.log('Password Hashed');
        console.log(user.password);
        return next();
      }
    })
  })
  })

错误:

Error: key $isUnderneathDocArray must not start with '$'
    at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:911:19)
    at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
    at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:937:17)
    at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
    at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:937:17)
    at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
    at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:727:17)
    at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
    at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:937:17)
    at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
    at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:937:17)
    at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
    at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:937:17)
    at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)
    at serializeInto (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:727:17)
    at serializeObject (/Users/ferro/Desktop/United-Way/Express/node_modules/bson/lib/bson/parser/serializer.js:347:18)

【问题讨论】:

    标签: node.js mongodb mongoose bcrypt


    【解决方案1】:

    问题出在这里:

        studentChat: {
        type: Array,
        default: [StudentChatSchema]
        },
    

        studentChat: {
        type: Array,
        default: []
        },
    

    不能为数组提供“架构”类型。呃。我在其他任何地方都找不到此错误消息,因此希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 2015-07-20
      • 2018-04-22
      • 2015-03-27
      • 2022-10-23
      • 1970-01-01
      • 2016-04-29
      • 2018-11-17
      • 1970-01-01
      相关资源
      最近更新 更多