как использовать обновленный хук в typegoose?

#node.js #mongodb #typescript #mongoose #typegoose

#node.js #mongodb #typescript #мангуст #typegoose

Вопрос:

Я добавил pre хук для updateOne событий, но он работает иначе save , чем события…

Я предполагаю, что это связано с тем, что команда update обычно передает сопоставитель в качестве первого аргумента. Я пытался поймать второй аргумент, но это анонимная функция, которую я не уверен, как использовать.

Документы Mongoose говорят об этом, но я не уверен, как на самом деле изменить схему Mongoose непосредственно из Typegoose.

https://mongoosejs.com/docs/middleware.html

Примечание: В отличие от schema.pre(‘remove’), Mongoose регистрирует промежуточное ПО updateOne и deleteOne в запросах #updateOne() и Query#deleteOne() по умолчанию. Это означает, что как doc.updateOne(), так и Model.updateOne() запускают хук updateOne , но это относится к запросу, а не к документу. Чтобы зарегистрировать промежуточное программное обеспечение updateOne или deleteOne в качестве промежуточного программного обеспечения document, используйте schema.pre(‘updateOne’, { document: true, query: false }).

 
// this does NOT work
@pre<Question>('updateOne', function (opts) {
  debug.log('updating', this)
  debug.log('opts', opts)
  recalcVotes(this) // incompatible type
})

// this does work
@pre<Question>('save', function () {
  this.cname = this.cname || makeCname(this.text)
  this.simple = this.simple || makeCname(this.text)
  // mutates because we can't modify 'this = ..'
  recalcVotes(this)
  debug.log('cleaned', this)
})
 
 Argument of type 'Query<Question>' is not assignable to parameter of type 'Question'.
  Type 'Query<Question>' is missing the following properties from type 'Question': text, tag, _id


 

РЕДАКТИРОВАТЬ: я только что обновился до последних версий пакета
Больше не выдает ошибку, но типы разные.

 -    "mongoose": "^5.10.15",
     "mongoose": "^5.11.0",
 

и intellisense обнаруживает разные типы для этого предварительно updateOne против save хуков

pre.updateOne = any

введите описание изображения здесь

pre.save = this: DocumentType<Question>

введите описание изображения здесь

 npm ls mongoose
bot@1.0.0 /Users/dc/dev/ten/puzzleparty/server
└── mongoose@5.11.0

npm ls @typegoose/typegoose
bot@1.0.0 /Users/dc/dev/ten/puzzleparty/server
└── @typegoose/typegoose@7.4.2

npm -v
6.14.9
node -v
v14.5.0
npx tsc -v
Version 4.1.2

 

Комментарии:

1. какие версии typegoose amp; mongoose и @types/mongoose используются?

2. Я наткнулся на последнюю версию и проверил еще раз

3. не могли бы вы обновить typegoose до версии 7.4.4 (и mongoose до версии 5.10.18, максимально поддерживаемой typegoose на данный момент) и сообщить об этом?

4. Это беспорядок, вы должны использовать оба.

Ответ №1:

Я думаю, что он жалуется, потому что вы пытаетесь вернуть документ, в то время как это просто запрос