我试图在我的/models/LocatableUser.js中使用的钩子中的总体目标是弄清楚是否需要更新的实际更改,如果有,请做一些事情(制作另一个api)呼叫)。
我有一个继承自此自定义模型的自定义模型结构,因此在父模型中定义before save
挂钩时,它适用于两个子模型。以下是我在父模型LocatableUser中定义的方法示例:
LocatableUser.observe('before save', function (ctx, next) {
if (ctx.instance){ // new record
ctx.instance._address.getGeopoint(function (error, location) {
setLocation(error, location, ctx.instance, next);
});
} else if (ctx.currentInstance) { // this is an update, currentInstance is treated as immutable
LocatableUser.findById(ctx.currentInstance.id, function(err, data) {
console.log('Locatable User: current data is: ', err, data)
})
console.log('Locatable User: ctx is:', ctx);
ctx.currentInstance._address.getGeopoint(function (error, location) {
setLocation(error, location, ctx.data, next);
});
} else {
console.warn('no context instance');
}
});
此代码的问题是,由于没有LocatableUser
的具体类,调用LocatableUser.findById()
将找不到任何内容,因为实际的类将是{{1}的某个子类}。我发现唯一有效的方法是在两个子类中定义此方法,但这会复制代码。
有没有办法让LocatableUser
类调用派生类'findById
方法?
Loopback版本2.22.0
答案 0 :(得分:2)
事实证明我是以错误的方式解决这个问题:
在PUT调用中,ctx.currentInstance
作为当前存储的实例进入,无需我按ID查询同一个实例。 ctx.data
对象是来自对其余API的调用的实际有效负载,因此我可以将来自该数据的数据与currentInstance
进行比较,以确定是否需要运行某些更新逻辑。