пн goose: промежуточное программное обеспечение перед удалениемОдин варианты не работают - PullRequest
1 голос
/ 31 января 2020

документация пн goose говорит:

Пн goose - Схема пред

Schema.prototype.pre ():
Параметры:
Имя метода «String | RegExp» или регулярное выражение для соответствия имени метода
[параметры] «Объект»
[options.document] «Boolean» Если имя является ловушкой для промежуточного программного обеспечения как для документов, так и для запросов, установите значение true для запуска на промежуточном программном обеспечении для документов.
[options.query] «Boolean» Если имя является ловушкой для промежуточного программного обеспечения для документов и запросов, для которого установлено значение true для запуска на промежуточном программном обеспечении для запросов.
обратный вызов «Функция»

А также о предварительном хуке «deleteOne»: Пн goose - промежуточное ПО

Промежуточное программное обеспечение документа поддерживается для следующих функций документа. В функциях промежуточного программного обеспечения документа это относится к документу: ... deleteOne

Промежуточное программное обеспечение для запросов поддерживается для следующих функций Модель и Запрос. В запросе middleware> functions это относится к запросу: ... deleteOne

Итак, deleteOne находится в хуке Document and Query, теперь давайте попробуем использовать это:

mySchema.pre('deleteOne', { document: true }, function(next) {
  console.log(this)
  next()
})

Результат: это относится к Запрос, а не документ. Почему?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Вам необходимо добавить к опциям: {query,false}

Если нет, предварительный хук будет запущен дважды:

сначала для документа - this будет документом

секунда для запроса - this будет запросом

Напишите его так:

DocSchema.pre('deleteOne', { document: true,query,false }, function(next) {
  console.log(this)

})
2 голосов
/ 01 февраля 2020

О, из документов не ясно, что 'this' относится к документу только в document # deleteOne.

Итак, правильное использование ловушки deleteOne: В модели:

DocSchema.pre('deleteOne', { document: true }, function(next) {
  console.log(this)
  next()
})

позже в коде (в контроллере и т. Д. c):

const doc = await DocModel.findOne({ name: 'myDoc' })
await doc.deleteOne()

Теперь «это» относится к документу 101

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