gpt4 book ai didi

node.js - mongoose hook 访问原始参数

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:59 24 4
gpt4 key购买 nike

我想在 mongoose 中创建帐户时对用户密码进行哈希处理,设置了一个钩子(Hook)来异步哈希密码并在帐户上设置 _password 属性。

var accountSchema = new mongoose.Schema({
name: {type : String},
_password : {type : String}
})

accountSchema.pre('save', true, function hook (next, done) {
next();
doHashPassword(done);
});

var Account = mongoose.model('Account', accountSchema);

Joe = new Account({name : "Joe", password : "secret"});

Joe.save();

我如何在我的哈希函数/钩子(Hook)中访问 Joe ({name : "Joe", password : "secret"}) 的原始参数?因为密码没有映射到私有(private)属性(这是为了不意外地以明文形式设置密码)

提前致谢

最佳答案

我不能 100% 确定您可以访问不属于架构的原始属性。

我确实知道,在某一时刻有一个选项可以启用/禁用在数据库中保存非架构属性,因此即使发送 { name: 'Joe', password: 'secret' } 禁用此类选项也要小心,否则您会意外创建并设置“password”。自从我研究这个问题以来已经有几个版本了,所以你可能没问题。

通常,我们不使用常规的“设置”密码,而是创建一个实例方法,例如:

var joe = new Account({ name: 'Joe' });
joe.setPassword('secret', function() {
joe.save();
});

这具有封装密码逻辑(而不是依赖不太明显的 Hook )并使密码管理成为显式事件的良好副作用。像这样的东西可能适合你:

accountSchema.methods.setPassword = function(plain, done) {
var self = this;
doHashPassword(plain, function(err, result) {
self._password = result;
if (done) done();
});
};

Mongoose 文档有创建实例方法的指南:

您还可以在这种一般情况下添加一些糖,使其可链接,或者忽略 setPassword() 的回调,或者将 setPassword() 更改为 savePassword(),这样您就不必担心完成后保存...等等。有很多选择。

关于node.js - mongoose hook 访问原始参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14590609/

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