【发布时间】: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