我有两种内容类型:产品和临时购物篮
产品包含一个字段;我想根据以下形状更改或创建的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
}
model
和result
是猫鼬对象。文档似乎建议model.products
应该包含我需要的数据-但这是未定义的。
如何在生命周期方法中通过调用访问数据?
然后可以在生命周期挂钩中使用“产品”中的控制器吗?
最后,(抱歉堆栈溢出神)这是正确的方法吗?
谢谢!
答案 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的工作原理,我不确定是否有任何解决方法。