在express中使用bcrypt时,我大多看到“pre”函数被用作userSchema.pre('save', async function(){..})。
我知道它是一个中间件,在.save()之前运行函数来加密密码,但是将“pre”与 userSchema 一起使用的逻辑是什么?..像 userSchema.pre()
当我们使用bcrypt时,我们需要在将密码添加到数据库之前(预)对其进行哈希处理,因此此过程是在保存前完成的,而不是在保存后(后)进行的,我们无法在保存后对密码进行哈希处理,它在保存之前进行了哈希处理
嗯,这只是在存储文档之前对其进行操作的一种便捷方式,例如为了确保密码不会以明文形式存储并转换为哈希值(正如您提到的,这通常是使用 bcrypt 完成的)。
这里有一篇很好的文章,详细解释了:https://www.thepolyglotdeveloper.com/2019/02/hash-password-data-mongodb-mongoose-bcrypt/
Pre() 是一个 mongoose 方法,我们可以使用它在创建模式对象之前执行操作。它返回您使用 mongoose schema 定义的 schema 对象。