Мангуста pre save не работает с дискриминаторами - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь вызвать pre save hook перед сохранением владельца в mongoose.Предварительно сохранить крючок не называется.Есть ли способ сделать это?

const baseOptions = {
    discriminatorKey: '__type',
    collection: 'users'
}
const Base = mongoose.model('Base', new mongoose.Schema({}, baseOptions));

const Owner = Base.discriminator('Owner', new mongoose.Schema({
    firstName: String,
    email: String,
    password: String,

}));

const Staff = Base.discriminator('Staff', new mongoose.Schema({
    firstName: String,     
}));

это не называется

 Owner.schema.pre('save', function (next) {
    if (!!this.password) {
        // ecryption of password
    } else {
        next();
    }
})

1 Ответ

0 голосов
/ 23 января 2019

AFAIK-хуки должны быть добавлены в вашу схему до компиляции вашей модели, следовательно, это не сработает.

Однако вы можете сначала создатьсхему для дискриминатора, затем определите хук (-ы) и, наконец, создайте модель дискриминатора из базовой модели и схемы.Обратите внимание, что для ловушек дискриминатора также будут вызываться ловушки базовой схемы.

Более подробная информация в этом разделе документации mongoose:

Дискриминаторы MongooseJS Copy Hooks

В вашем случае, я думаю, это сработает:

const baseOptions = {
    discriminatorKey: '__type',
    collection: 'users'
}
const Base = mongoose.model('Base', new mongoose.Schema({}, baseOptions));

// [added] create schema for the discriminator first
const OwnerSchema = new mongoose.Schema({
    firstName: String,
    email: String,
    password: String,
});

// [moved here] define the pre save hook for the discriminator schema
OwnerSchema.pre('save', function (next) {
    if (!!this.password) {
        // ecryption of password
    } else {
        next();
    }
})

// [modified] pass the discriminator schema created previously to create the discriminator "Model"
const Owner = Base.discriminator('Owner', OwnerSchema);

const Staff = Base.discriminator('Staff', new mongoose.Schema({
    firstName: String,     
}));
...