javascript - Mongoose 模块 (NodeJS) 中的 Schema.pre

标签 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”,我想他们称之为钩子(Hook),但我不明白它是什么意思。之后还有一个回调函数作为参数“next”,但我认为回调函数中的第一个参数总是“error”。 如果有人可以阐明该代码块,我将不胜感激...提前致谢

最佳答案

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

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

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

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

关于javascript - Mongoose 模块 (NodeJS) 中的 Schema.pre,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35956866/

相关文章:

javascript - 如何在向导中编辑表单并为向导保存其状态

javascript - Grunt 模板任务

javascript - 我们如何模拟每个测试与 Jest 的依赖关系?

xcode - 为什么 npm install 由于 Xcode 而失败?

node.js - Parent.setChild 不是一个函数

node.js - 替换缓冲区内容的最佳方式

javascript - 如何在单击删除按钮时删除基于特定类名的 div

javascript - 字体大小变化问题

node.js - JSON.stringify() 未正确将对象转换为字符串

javascript - 当我尝试请求我的 javascript 文件时,无法找到模块 'models/PermissionModel' 错误