gpt4 book ai didi

node.js - Mongoose Pre Command 未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:14 25 4
gpt4 key购买 nike

嗨,我是 Mongoose 的新手,并尝试使用 pre 命令将字符串中的给定密码转换为哈希值,然后再将其保存到数据库中。我没有收到任何语法错误,但我的密码没有转换为哈希 IDS。

我的 Controller 代码如下:

User.save(req.body,function(err,data){
if (err) {
res.json({
sucess:false,
exception:err
});
}
else{
res.json({
sucess:true,
User:data
});

}
});

User.pre('save',function(next){
bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt){
if(err){
return res.json({
success:false,
exception:err
});
}
bcrypt.hash(password, salt, function(err, hash) {
if(err){
return res.json({
success:false,
exception:err
});
}
password=hash;
});
});
next();

});

使用 Node 检查器我发现命令行没有进入 User.pre 。所以有人可以让我知道我在哪里犯了错误吗?

最佳答案

您的代码存在各种问题,主要部分是 Hook 应该附加到架构而不是模型,这似乎就是您的意思正在做。

此外,看起来您正在尝试为每个请求添加一个预保存 Hook ,这不是 Hook 应该如何工作的:它们应该在架构上仅声明一次(如上所述)和 < em>在创建模型之前。

顺序应与此类似:

var UserSchema = new mongoose.Schema(...);

UserSchema.pre('save', ...);

var User = mongoose.Model(UserSchema);

这意味着您无法从预保存 Hook 发送错误响应,就像您现在尝试做的那样,但无论如何您并不真正想要这样(我应该将您的 Mongoose 架构/模型分开)来自您的 Express 路线处理程序)。相反,捕获 .save() 期间引发的任何错误并在那里处理它们。

为了了解正确的 Hook 是什么样子,这里有一个示例(我对您的 User 架构进行了猜测,因此它可能使用了错误的字段名称):

UserSchema.pre('save', function(next) {
var document = this;
bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) {
if (err) return next(err);
bcrypt.hash(document.password, salt, function(err, hash) {
if (err) return next(err);
document.password = hash;
next();
});
});
});

关于node.js - Mongoose Pre Command 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31338296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com