Запустить еще один вызов API в обратных вызовах жизненного цикла - Strapi

У меня есть два типа контента: продукты и TempBaskets

Продукция содержит поле; stock-total который я хотел бы изменить на основе создаваемых или обновляемых TempBaskets этой формы:

{ 
 "products":{
   "test-product": {
     "quantity":1,
     "id":"5b945b5b91f2d31698893914",
     "price":123
   }
 },
 "id":"5bb6a2c34f119f72182ec975",
 "totals": {
   "items":1,
   "price":123
 }
}

Я хочу перехватить эти данные в хуках жизненного цикла TempBaskets, затем вызвать один из контроллеров Products и обновить запас тестового продукта на -1.

afterUpdate: async (model, result) => {
    console.log(model);
    console.log(result);
    console.log(model.products); // undefined
    console.log(model.body); // undefined
    console.log(model.data); // clutching at straws - undefined 
}

model а также result являются объектами мангусты. Документы, кажется, предлагают model.products должен содержать данные, которые мне нужны - но они не определены.

Как получить доступ к данным из вызова в методах жизненного цикла?

Могу ли я тогда использовать контроллеры из Продуктов в хуках жизненного цикла?

Наконец, (извините, боги переполнения стека) это правильный подход?

Спасибо!

1 ответ

Я просто столкнулся с этим, и я не уверен, что это идеальный подход, но вот как я справился с этим.

// Before updating a value.
// Fired before an `update` query.
beforeUpdate: async function(model) {
  // Get _id of project being updated
  let documentId = model._conditions._id;
  // Tack it on to the middleware chain so it can be used in post save hook
  this.documentId = documentId;
},

// After updating a value.
// Fired after an `update` query.
afterUpdate: async function(model, result) {
  // Pull the updated project
  let updatedDocument = await this.findById(this.documentId);
},

Обратите внимание на изменение в async (model) => {} в async function(model){}, Промежуточное программное обеспечение Mongoose работает как цепочка, поэтому вы можете передавать данные из предварительной ловушки в пост-ловушку. Такое ощущение, что он делает дополнительный вызов базы данных, но я не уверен, что есть какие-то способы обойти это из-за того, как работает Mongoose.

Другие вопросы по тегам