我开始使用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",我认为他们称之为钩子,但我不明白这意味着什么。之后还有一个回调函数作为参数" next"但我认为回调函数中的第一个参数总是"错误"。 如果有人能对这段代码有所了解,我会非常感谢...提前致谢
答案 0 :(得分:1)
这是一个中间件函数,在项目保存到数据库之前直接调用(因此名称为pre)。这使得可以在保存对象之前直接执行函数。很多时候它用于转换价值。
在这种情况下,在保存对象之前,它将散列密码并保存该散列密码而不是纯文本版本。
next()
是您完成功能后调用的回调。您可以在该回调中传递错误,如果您这样做,第一个错误处理中间件将处理该功能,因此您的项目将不会保存到数据库。
您可以找到更多信息in the docs of Mongoose。