猫鼬虚拟现场
问题描述:
我创建的模式用户是这样的:猫鼬虚拟现场
var schema = new Schema({
username: {
type: String,
unique: true,
required: true
},
hashedPassword: {
type: String,
required: true
},
salt: {
type: String,
required: true
}
});
schema.virtual('password')
.set(function(password) {
this._plainPassword = password;
this.salt = Math.random() + '';
this.hashedPassword = this.encryptPassword(password);
})
.get(function() { return this._plainPassword; });
schema.methods.encryptPassword = function(password) {
return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
};
然后我想用这两种方法来更改密码:
-
工作不错
user.findById('userId ..',function(err,user){user.password ='456'; user.save(cb); })
-
为什么这种方法不起作用?
User.findByIdAndUpdate( '用户id',{$组:{密码: '456'}},CB)
答
这是因为猫鼬并不适用任何一个findByIdAndUpdate()
操作下面的:
- 默认
- 制定者
- 验证
- 中间件
从docs:
如果需要这些功能,使用的第一 检索文档的传统做法。
Model.findById(id, function (err, doc) { if (err) .. doc.name = 'jason borne'; doc.save(callback); })
答
与版本4.0.9+中间件支持findByIdAndUpdate()
。
CustomerSchema.pre('findOneAndUpdate', function(next, done) {
console.log("findOneAndUpdate pre middleware!!!");
next();
});