我应该使用什么环回钩子?

时间:2016-08-18 17:51:37

标签: loopbackjs

我正在尝试做以下事情:

我有一个模型,比如myModel,它有一些方法calculateSomething。我通过在MyModel.js文件中写这样的东西来定义该函数:

MyModel.prototype.calculateSomething = function(cb){
    ...
    return cb(null,result)
} 

现在,只要从api返回MyModel的实例,我想在json中包含calculateSomething的结果。

我该怎么做?我尝试使用"已加载" hook,但我相信这个钩子在创建MyModel实例之前执行,所以我不能在那里调用calculateSomehing方法。

编辑:事实证明我可以使用"加载"钩。我可以使用钩子中的ctx.instance来获取对象。

我对文档感到困惑:  " LoopBack在连接器获取数据之后但在从该数据创建模型实例之前调用此挂钩"。文档是错误的还是我误解了?

1 个答案:

答案 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。我个人虽然没有尝试过,但它看起来非常适合你的需要。