.save与保存预​​钩子将不适用于猫鼬

问题描述

所以最近几天我一直在为此苦苦挣扎。

我在Mongoose中创建了一个用户架构,并且有一个预保存钩子对它的密码字段进行了哈希处理。每次尝试将用户保存到数据库时,我都注意到save方法从未被调用过。我收到的错误消息对我而言(当时)毫无意义。事实证明,它与pre 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,profilePicture: {
      type: String,resume: {
      type: String,email: {
      type: String,password: {
      type: String,minlength: 6
    },favoriteJobs: {
      type: Array,default: []
    },followedPost: {
    type: Array,posts: {
    type: Array,eventsGoing: {
    type: Array,studentChat: {
    type: Array,default: [StudentChatSchema]
    },mentorChat: {
    type: Array,notifications: {
    type: Array,})

预保存:

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,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)

解决方法

问题出在这里

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

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

无法为数组提供“架构”类型。咄。我在其他任何地方都找不到此错误消息,因此希望可以帮助其他人。