Получите данные конструктора мангусты в хуке pre-save - PullRequest
0 голосов
/ 08 июля 2019

У меня есть схема вроде:

const CustomerSchema = new Schema({
  email: { type: String, required: true, unique: true },
  flags: { 
    marketingConsent: { type: Booleam, required: true },
  },
});

Когда я делаю нового клиента:

const customer = new Customer({ email, marketingConsent });

1.) Можно ли получить доступ к данным, переданным в конструктор (email, marketingConsent) в хуке предварительного сохранения?

2.) Если нет, как правильно устанавливать вложенные объекты непосредственно из конструктора?

Если я это сделаю:

const customer = new Customer({
  email,
  ["flags.canMarket"]: consentValue,
});

await customer.save();

Я получаю ошибку:

Customer validation failed: flags.canMarket: Path `flags.canMarket` is required.

Предварительное сохранение выглядит так:

CustomerSchema.pre("save", function(next) {
  const self = this;

  if (self.isNew) {
    // Set passed in marketingConsent value.
  }

  next();
});

1 Ответ

1 голос
/ 08 июля 2019

Да, возможно использовать данные в хуках предварительного сохранения,

CustomerSchema.pre("save", { query: true,document: true  }, function (error, data, next) {
const self = this;
// here you can access the data variable to use your data. for ex:
console.log(data.email);
console.log(data.marketingConsent)
if (self.isNew) {
 // Set passed in marketingConsent value.
}

next();
});

ошибка, которую вы получили, потому что вы не передали значение flags.canMarket.

Iнадеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...