LoopBack操作挂钩使用多个模型

时间:2017-09-22 17:14:15

标签: javascript loopbackjs

我对LoopBack的操作挂钩有疑问。

here所说的内容的帮助下,我尝试以编程方式创建一个权限对象,只要“保存后”'触发了公司模型的事件。这是为了在保存一个对象后自动创建对象。

  

请注意,我已将我的案例简化为简单,但实际上我会在创建公司后创建多个对象。

我在common/models/文件夹中创建了一个脚本,其中包含以下代码:

module.exports = function (Company) {
    Company.observe('after save', function createObjectsForNewClient(ctx, next) {
    if (ctx.instance) {
        log('A new Company has been created. Shall create a Privilege for it.');

        Privilege.create(
            {...},
            function (err, obj) {
                if(err)
                    console.error(err);

                if(obj)
                    console.lof(obj);
                }
            );
        }
    }
}

有了这个,钩子被正确触发但是LoopBack停止了一个例外:

  

TypeError:无法读取属性'权限'未定义的

我认为这个模型可以在某些loopback / javascript / almost-magic范围内的某个地方使用。问题是我还尝试在module.exports = function (Company, Privilege) {...块中添加 Privilege 模型,但它似乎不接受列出要在函数中使用的无数模型。 .. 您还应该注意,我已将模型创建到common/models/文件夹中的JSON文件中,但没有其他JS脚本用于这些模型,因为LoopBack似乎自动处理导出。是否会对我们无法访问的事实产生影响?

我可能在某处做错了什么,但我想做的事情似乎相当简单。有没有人有想法?

1 个答案:

答案 0 :(得分:2)

其他型号可通过Model.app.models访问。

我通常在前几行中定义我的远程方法或钩子所需的所有模型,例如:

module.exports = function (Company) {
    Company.observe('after save', function createObjectsForNewClient(ctx, next) {
        const Privilege = Company.app.models.Privilege,
              OtherModel = Company.app.models.OtherModel;
        // the rest of your operation hook

请注意,您必须为每个方法执行此操作。这不起作用,因为模型在编译时没有引导:

module.exports = function (Company) {
    // won't work
    const OtherModel = Company.app.models.OtherModel;