TypeError: Невозможно прочитать свойство 'collections' из неопределенных парусов

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам