Запустить еще один вызов 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.