在findOneAndUpdate上生成哈希密码

时间:2018-11-04 22:24:19

标签: node.js mongodb mongoose mongoose-schema

我在架构中的pre findOneAndUpdate不起作用

这是我当前无法使用的findOneAndUpdate(不执行任何操作)

userSchema.pre('findOneAndUpdate', function (next) {
    this.update({}, { $set: { location: 'hey' } });
}

“ this”参数是类似于说明的here

的查询
  

查询中间件与文档中间件的区别很细微,但   重要方式:在文档中间件中,这是指文档   正在更新。在查询中间件中,猫鼬不一定具有   对要更新的文档的引用,因此这是指查询   对象而不是要更新的文档。

这是我从this项目复制的更新函数:

async update(id, data) {
        var filter = {};
        filter[this.key] = id;
        let updatedModel = await this.model.findOneAndUpdate(filter, data, { new: true });

        if (!updatedModel) {
            throw new Error(`update - not found ${id} for ${this.modelName}`);
        }
    }

这是我的架构:

let userSchema = new Schema({
    first_name: { type: String },
    last_name: { type: String },
    username: { type: String, required: true, unique: true },
    password: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    admin: { type: Boolean, default: false },
    location: String,
    created_at: { type: Date, default: Date.now() },
    last_login_at: { type: Date, default: Date.now() },
    resetPasswordToken: String,
    resetPasswordExpires: Date
});

我发现在更新时对密码进行哈希处理的唯一解决方案是在调用update方法之前对密码进行哈希处理,这是当前可接受的解决方案吗? 或者有什么变通办法可以让我在prefindOneAndUpdate上哈希密码

0 个答案:

没有答案