Передача значения виртуального свойства в хук Mongoose `pre-save` - PullRequest
0 голосов
/ 04 марта 2019

В моем бэкэнде MongoDB / Node я использую промежуточное программное обеспечение Mongoose (pre / post hooks) для генерации заметок при изменении определенных аспектов документа.Все работает как положено - кроме одного куска.Мне нужно знать _id последнего человека, который внес изменения в запись, чтобы его можно было включить в созданную заметку.

Теперь, если это значение можно сохранить в свойстве документа, это будет довольно просто.Я бы просто присвоил это значение свойству типа «lastModifiedBy».Однако направление этого проекта не позволяет этого.

Итак, мне интересно, могу ли я сделать это с виртуальным свойством?Я понимаю, как создать виртуальное свойство из данных, существующих в документе, например:

personSchema.virtual('name.full').get(function () {
  return this.name.first + ' ' + this.name.last;
});

Но как это будет работать, если значение не анализируется уже в данных модели документа?

И, чтобы уточнить, в моей функции, которая обновляет запись, я действительно имею доступ к этому значению.Но как мне передать это значение в мой файл триггеров через хук pre-save?Это вопрос, с которым я борюсь.Если возможно, будет полезна базовая демонстрация того, как это будет работать.Или, если есть другой способ сделать это, я тоже буду к этому открыт.

1 Ответ

0 голосов
/ 05 марта 2019

Вот как вы можете передать значение в ловушку перед сохранением: используйте символ ES6, например:

const lastModifiedBy = Symbol.for('lastModifiedBy');

// later
app.getAsync(async (req, res) => {
  const doc = await MyModel.findOne({ _id: req.params.id });
  doc[lastModifiedBy] = req.params.staffId;
  // Can now access `this[lastModifiedBy]` in save middleware: https://mongoosejs.com/docs/middleware.html
  await doc.save();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...