TypeError: Cannot read property 'collections' of undefined sails

TypeError: Cannot read property 'collections' of undefined sails

我正在使用 sails-sqlserver 作为我的适配器,我只是尝试在以下模型之一的数据库中创建一个新行。

这是第一个模型:

// Roles.js

module.exports = {

  autoCreatedAt: false,
  autoUpdatedAt: false,

  attributes: {

    name: {
      type: 'string'
    },

    approval_level: {
      model: 'approval_levels'
    },

    specified: {
      type: 'boolean' 
    },                
    entity_operations: {
      collection: 'entity_operations',
      via: 'roles',
      dominant: true
    },

    users: {
      collection: 'system_users',
      via: 'role'
    }

  },

  createRole: function (name, approval_level, cb) {

    values = {
      name: name,
      approval_level: approval_level
    };

    Roles.create(values).exec(cb);
  },


  getAll: function (cb) {
    Roles.find().exec(cb);
  }


};

这是第二个模型:

// Entity_Operations.js

module.exports = {

    autoCreatedAt: false,
    autoUpdatedAt: false,

    attributes: {

        entity_name: {
            type: 'string'
        },

        operation: {
            model: 'operations'
        },

        roles: {
            collection: 'roles',
            via: 'entity_operations'
        }

    },

    getAll: function (cb) {
        Entity_operations.find().exec(cb);
    }

};

这两个模型之间存在多对多关系,我要做的就是:

Entity_operations.create({
            entity_name: 'example',
            operation: 6
        }).exec((err, entity: Entity_operations) => {
            console.log(entity);
        });

然后这个错误就出现了,没有解释任何可以帮助我知道这个错误来自哪里的东西:

 /opt/nodejs/back-heaven/dev/node_modules/sails-sqlserver/lib/adapter.js:435
      Object.keys(connections[connection].collections[collection].definition).forEach(function(key) {
                                         ^
TypeError: Cannot read property 'collections' of undefined
    at Object.getPrimaryKey (/opt/nodejs/back-heaven/dev/node_modules/sails-sqlserver/lib/adapter.js:435:42)
    at Object.create (/opt/nodejs/back-heaven/dev/node_modules/sails-sqlserver/lib/adapter.js:374:24)
    at module.exports.create (/opt/nodejs/back-heaven/dev/node_modules/waterline/lib/waterline/adapter/dql.js:84:13)
    at child.createValues (/opt/nodejs/back-heaven/dev/node_modules/waterline/lib/waterline/query/dql/create.js:220:16)
    at /opt/nodejs/back-heaven/dev/node_modules/waterline/lib/waterline/query/dql/create.js:74:20
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:726:13
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:52:16
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:269:32
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:44:16
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:723:17
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:167:37
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:52:16
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:269:32
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:44:16
    at child.<anonymous> (/opt/nodejs/back-heaven/dev/node_modules/waterline/lib/waterline/utils/schema.js:152:44)
    at fn (/opt/nodejs/back-heaven/dev/node_modules/waterline/lib/waterline/utils/callbacksRunner.js:41:10)
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:181:20
    at iterate (/opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:262:13)
    at Object.async.forEachOfSeries.async.eachOfSeries (/opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:281:9)
    at Object.async.forEachSeries.async.eachSeries (/opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:214:22)
    at Object.runner.beforeCreate (/opt/nodejs/back-heaven/dev/node_modules/waterline/lib/waterline/utils/callbacksRunner.js:44:9)
    at /opt/nodejs/back-heaven/dev/node_modules/waterline/lib/waterline/query/dql/create.js:180:17
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:718:13
    at iterate (/opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:262:13)
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:274:29
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:44:16
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:723:17
    at /opt/nodejs/back-heaven/dev/node_modules/async/lib/async.js:167:37

当我在控制器中尝试相同的代码时,它成功了我在我自己实现的播种机中尝试了这个播种机,在它开始之前我以编程方式制作了一个帆 object 并调用 sails.load

像这样:

let myApp = new Sails();

    myApp.load({}, (err) => {
      if (err) throw err;

      // this execute the seeds in the database seeder class
      let seeder = require(`../../api/seeders/${scope.args[0]}`);
      seeder.handle(() => {

        myApp.lower((err) => {
          if (err) throw err;
          console.log(`Seeder ` + scope.args[0] + ` finished seeding`);
        });

      });

    });

我也试过 sails.lift() 还是一样的错误。

我发现了问题,我只是在制作一个应该调用 sails.lower() 的回调函数,它卸载或关闭风帆我把它放在了错误的地方,甚至在模型之前就被调用了创建代码starts.just忘记在数据库回调函数中调用它。

所以,对于在风帆中遇到同样问题的任何其他人,您的问题是风帆实际上没有装载,或者也许当您正在处理的操作开始时风帆正在工作,但之后由于某种原因风帆停止了,这使得模型做这个看起来很奇怪的问题我希望 sails 在他们的代码中处理此类错误以显示更具表现力的错误消息。

希望对大家有所帮助。