如何为mongoose查询创建middlawere

时间:2017-07-05 13:40:01

标签: node.js mongoose

我有遗留后端。这个后端使用猫鼬。有集合“用户”。这个系列有“电子邮件”字段。

我遇到了这个错误 - 电子邮件区分大小写。我想以小写字母保存所有新电子邮件。为此,我用这个修改了“用户”模式:

email: {
    type: String,
    lowercase: true
}

但后端还有很多地方可以使用:

user.find({email: some_case_unnormalized_email})

或者这个:

user.findOne({email: some_case_unnormalized_email})

我不想将这些地方修改为:

user.find({email: some_case_unnormalized_email.toLowerCase()})

相反,我想为“用户”架构创建一些中间件,如:

UsersSchema.middleware('any_query', queryObject => {
    if (queryObject.email) {
        queryObject.email = queryObject.email.toLowerCase();
    }
});

怎么做?

1 个答案:

答案 0 :(得分:3)

使用预保存挂钩修改任何属性

UserSchema.pre('find', function(next){
    var query = this;
    // console.log(JSON.stringify(query, null, 2));
    // update your query here
    next();
})

UserSchema.pre('findOne', function(next){
    var query = this;
    // console.log(JSON.stringify(query, null, 2));
    // update your query here
    next();
})