我正在尝试做以下事情:
我有一个模型,比如myModel,它有一些方法calculateSomething。我通过在MyModel.js文件中写这样的东西来定义该函数:
MyModel.prototype.calculateSomething = function(cb){
...
return cb(null,result)
}
现在,只要从api返回MyModel的实例,我想在json中包含calculateSomething的结果。
我该怎么做?我尝试使用"已加载" hook,但我相信这个钩子在创建MyModel实例之前执行,所以我不能在那里调用calculateSomehing方法。
编辑:事实证明我可以使用"加载"钩。我可以使用钩子中的ctx.instance来获取对象。我对文档感到困惑: " LoopBack在连接器获取数据之后但在从该数据创建模型实例之前调用此挂钩"。文档是错误的还是我误解了?
答案 0 :(得分:1)
如何使用Remote Hooks(在mymodel.js上):
// run before any static method eg. MyModel.find
MyModel.beforeRemote('*', function(ctx, myModel, next) {
myModel.calculateSomething(function(err, something) {
if (err) throw err
myModel.something = something
next()
})
});
或强>
如果你需要在对象初始化阶段(虽然操作挂钩loaded
似乎不起作用),也许你可以尝试模型钩子afterInitialize,假设没有从{{1}调用异步调用}:
calculateSomething
或强>
如下所述,如果您需要执行异步调用和/或希望在子类上使用此逻辑,我认为您应该考虑将MyModel.afterInitialize = function() {
this.something = this.calculateSomething(function(err, result) {
return result
})
}
不是作为对象/原型方法而是作为mixins。我个人虽然没有尝试过,但它看起来非常适合你的需要。