【问题标题】:SailsJS One-To-Many not working since v0.11.0SailsJS 一对多从 v0.11.0 开始不起作用
【发布时间】:2015-03-25 14:00:21
【问题描述】:

我目前正在开发 SailsJS 应用程序。我开始使用版本 0.10.5 并实现了许多模型之间的继承。一切正常。

今天,我决定将 SailsJS 项目更新到版本 0.11.0。我读过最简单的方法是使用 npm 更新所有 SailsJS 文件,然后创建一个新项目,最后将所有模型、控制器等复制到新创建的项目中。 这是我到目前为止所做的。

我现在每次尝试提升我的项目时都会遇到一个问题:

/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/waterline-schema/lib/waterline-schema/foreignKeys.js:82
    throw new Error('Trying to access a collection ' + collection + ' that is 
          ^
Error: Trying to access a collection series that is not defined.
    at ForeignKeys.findPrimaryKey (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/waterline-schema/lib/waterline-schema/foreignKeys.js:82:11)
    at ForeignKeys.replaceKeys (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/waterline-schema/lib/waterline-schema/foreignKeys.js:53:27)
    at new ForeignKeys (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/waterline-schema/lib/waterline-schema/foreignKeys.js:30:10)
    at new module.exports (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/waterline-schema/lib/waterline-schema.js:30:17)
    at Waterline.initialize (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline.js:107:17)
    at buildORM (/usr/local/lib/node_modules/sails/lib/hooks/orm/build-orm.js:52:15)
    at Array.async.auto.instantiatedCollections [as 1] (/usr/local/lib/node_modules/sails/lib/hooks/orm/index.js:203:11)
    at listener (/usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:493:46)
    at /usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:444:17
    at Array.forEach (native)
    at _each (/usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:46:24)
    at Object.taskComplete (/usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:443:13)
    at processImmediate [as _immediateCallback] (timers.js:345:15)

有我的模型:

/api/services/OrthancObject.js

module.exports = {
    attributes:
    {
        ID:
        {
            type: 'STRING',
            primaryKey: true,
            required: true
        },
        Type:
        {
            type: 'STRING',
            required: true
        },
        MainDicomTags:
        {
            type: 'JSON',
            required: true
        }
    }
}

/api/services/OrthancMutableObject.js

var OrthancObject = require('./OrthancObject.js');
module.exports = _.merge(_.cloneDeep(OrthancObject),
{
    attributes:
    {
        IsStable:
        {
            type: 'BOOLEAN',
            required: true
        },
        LastUpdate:
        {
            type: 'DATETIME',
            required: true
        }
    }
});

/api/models/Patient.js

var OrthancMutableObject = require('../services/OrthancMutableObject.js');
    module.exports = _.merge(_.cloneDeep(OrthancMutableObject),
    {
        attributes:
        {
            Studies:
            {
                collection: 'Study',
                via: 'ParentPatient',
                required: true
            }
        }
    });

/api/models/Study.js

var OrthancMutableObject = require('../services/OrthancMutableObject.js');
module.exports = _.merge(_.cloneDeep(OrthancMutableObject),
{
    attributes:
    {
        ParentPatient:
        {
            model: 'Patient',
            required: true
        },
        Series:
        {
            collection: 'Series',
            via: 'ParentStudy',
            required: true
        }
    }
});

/api/models/Series.js

var OrthancMutableObject = require('../services/OrthancMutableObject.js');
module.exports = _.merge(_.cloneDeep(OrthancMutableObject),
{
    attributes:
    {
        ExpectedNumberOfInstances:
        {
            type: 'INTEGER'
        },
        Instances:
        {
            collection: 'Instance',
            via: 'ParentSeries',
            required: true
        },
        ParentStudy:
        {
            model: 'Study',
            required: true
        },
        Status:
        {
            type: 'STRING'
        }
    }
});

/api/models/Instance.js

var OrthancObject = require('../services/OrthancObject.js');
module.exports = _.merge(_.cloneDeep(OrthancObject),
{
    attributes:
    {
        FileSize:
        {
            type: 'INTEGER',
            required: true
        },
        FileUuid:
        {
            type: 'INTEGER',
            required: true
        },
        IndexInSeries:
        {
            type: 'INTEGER',
            required: true
        },
        ParentSeries:
        {
            model: 'Series'
        }
    }
});

你能解释一下我做错了什么吗?我不明白为什么它不再工作了(提醒:它在 v 0.10.5 中运行良好)。

感谢阅读, 祝你有美好的一天:)

【问题讨论】:

    标签: javascript node.js sails.js waterline


    【解决方案1】:

    你所有的模型都应该在api/models。无处。如果你只是遵守约定,一切都会好起来的。

    如果您有从中扩展的“基本”模型,如果您不想在数据库中为它们创建表,只需将它们完全放在 api/ 之外。

    【讨论】:

    【解决方案2】:

    好的,伙计们。我找到了解决方案: 我不得不将我所有的基础模型从 /api/services 移动到 /api/base。现在它有效,但我真的不知道为什么。也许 SailsJS 自上次更新以来不再在 /api/services 中发挥其魔力了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多