Mongoose模块中的Schema.pre(NodeJS)

时间:2016-03-12 11:08:17

标签: javascript node.js mongoose callback

我开始使用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"但我认为回调函数中的第一个参数总是"错误"。 如果有人能对这段代码有所了解,我会非常感谢...提前致谢

1 个答案:

答案 0 :(得分:1)

这是一个中间件函数,在项目保存到数据库之前直接调用(因此名称为pre)。这使得可以在保存对象之前直接执行函数。很多时候它用于转换价值。

在这种情况下,在保存对象之前,它将散列密码并保存该散列密码而不是纯文本版本。

next()是您完成功能后调用的回调。您可以在该回调中传递错误,如果您这样做,第一个错误处理中间件将处理该功能,因此您的项目将不会保存到数据库。

您可以找到更多信息in the docs of Mongoose。