TypeError: Не удается прочитать свойства «коллекции» неопределенных парусов

я использую паруса-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

когда я попробовал тот же код в контроллере, он преуспел, я пробую его в сеялке моей собственной реализации, перед тем, как она запустится, я программно создаю объект паруса и вызываю Sailes.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`);
        });

      });

    });

Я также пробовал с парусами.lift() и все та же ошибка.


person ElGenius    schedule 06.08.2017    source источник


Ответы (1)


Я обнаружил проблему, я просто делал функцию обратного вызова, которая должна вызывать паруса.lower(), которые выгружают или закрывают паруса. Я помещал ее не в то место, где она вызывалась, еще до запуска кода создания модели. просто забудьте вызовите его в функции обратного вызова базы данных.

Итак, для всех, кто сталкивается с той же проблемой в парусах, ваша проблема заключается в том, что паруса на самом деле не загружены или, может быть, когда операция, над которой вы работали, запускала паруса, работала, но после этого по какой-то причине паруса остановились, что заставило модели делать это странно Ищу проблему Я надеюсь, что паруса обработают такие ошибки в своем коде, чтобы показать более выразительные сообщения об ошибках.

Надеюсь, это кому-нибудь поможет.

person ElGenius    schedule 07.08.2017