为了在对象保存到mongodb之前对密码进行散列,我使用了mongoose自带的内置pre-save钩子,但是在更新过程中处理散列的正确方法是什么呢?
我尝试用pre-update钩子来解决这个问题,但是这有一些明显的缺点,因为它绕过了模型验证(例如密码长度)。
这就是我的方法(简称):
userSchema.pre('findOneAndUpdate', function (next) {
let query = this;
let update = query.getUpdate();
if (!update.password) {
return next();
}
hashPassword(update.password, function (err, hash) {
//handle error or go on...
//e.g update.password = hash;
});
});
那么,解决这个问题的首选方法是什么呢?
1条答案
按热度按时间h4cxqtbf1#
我将使用
'save'
之前的中间件:但是这样做还需要使用
save
来更新文档:如更新文档中所述:
[...]
虽然在使用update时会将值强制转换为相应的类型,但不应用以下内容:
如果需要这些特性,请使用传统的方法,首先检索文档。
一个可验证的例子:
有关示例的额外信息: