我正在开始使用 NodeJS,目前我正在研究我在互联网上找到的一个很好的教程来管理身份验证: https://devdactic.com/restful-api-user-authentication-1/
有一段代码我不太明白,我在互联网上找不到进一步的解释,即使是在模块的官方页面上......
UserSchema.pre('save', function (next) {
var user = this;
if (this.isModified('password') || this.isNew)
{
bcrypt.genSalt(10, function (err, salt)
{
if (err)
{
return next(err);
}
bcrypt.hash(user.password, salt, function (err, hash) {
if (err) {
return next(err);
}
user.password = hash;
next();
});
});
}
else
{
return next();
}
});
在这段代码中,什么是“pre”,我想他们称之为钩子(Hook),但我不明白它是什么意思。之后还有一个回调函数作为参数“next”,但我认为回调函数中的第一个参数总是“error”。 如果有人可以阐明该代码块,我将不胜感激...提前致谢
最佳答案
这是一个中间件函数,在将项目保存到数据库之前直接调用(因此得名 pre)。这使得在保存对象之前直接执行功能成为可能。很多时候它被用来转换一个值。
在这种情况下,在保存对象之前,它会对密码进行散列处理并保存该散列密码而不是纯文本版本。
next()
是您在完成函数时调用的回调。您可以在该回调中传递一个错误,如果您这样做,第一个错误处理中间件将处理该函数,因此您的项目将不会保存到数据库中。
您可以找到更多信息in the docs of Mongoose 。
关于javascript - Mongoose 模块 (NodeJS) 中的 Schema.pre,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35956866/