【问题标题】:LoopBack operation hook use multiple modelsLoopBack 操作钩子使用多个模型
【发布时间】:2017-09-23 02:00:10
【问题描述】:

我有一个关于 LoopBack 的操作钩子的问题。

在here 的帮助下,每当我的 Company 模型的“保存后”事件被触发时,我都会尝试以编程方式创建一个 Privilege 对象.这是在保存对象后自动创建对象。

请注意,我已经简化了我的案例以使其简单,但实际上我会在创建 Company 之后创建几个对象。

我在我的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: 无法读取未定义的属性“Privilege”

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

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

【问题讨论】:

    标签: javascript loopbackjs


    【解决方案1】:

    其他型号可通过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;
    

    【讨论】:

    • 非常感谢,这正是我所需要的。还要感谢您的提示,我可能会浪费时间尝试通过全球化我的其他模型来使我的代码通用!
    猜你喜欢
    • 2015-01-29
    • 1970-01-01
    • 2019-12-07
    • 2014-12-25
    • 2016-06-10
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多