在生命周期回调中触发另一个API调用-Strapi

时间:2018-10-05 07:53:41

标签: mongoose strapi

我有两种内容类型:产品和临时购物篮

产品包含一个字段;我想根据以下形状更改或创建的TempBaskets更改stock-total

{ 
 "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 
}

modelresult是猫鼬对象。文档似乎建议model.products应该包含我需要的数据-但这是未定义的。

如何在生命周期方法中通过调用访问数据?

然后可以在生命周期挂钩中使用“产品”中的控制器吗?

最后,(抱歉堆栈溢出神)这是正确的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我只是遇到这个问题,我不确定这是否是完美的方法,但是这就是我的解决方法。

// 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的工作原理,我不确定是否有任何解决方法。