Жесткая загрузка с Feathers JS 4 и Objection JS - Не удается прочитать свойство 'get' из неопределенного - PullRequest
1 голос
/ 29 января 2020

Я использую перья js 4 с возражением ORM и пытаюсь создать службу, которая возвращает данные модели возражения js, которая включает в себя загруженный BleongsToOneRelation, но я продолжаю получать ответ:

Не удается прочитать свойство 'get' из неопределенного

. Я использовал интерфейс командной строки Feathers для создания своей службы (и модели), а затем изменил ее, добавив отношение следующим образом:

devices.model. js

const { Model } = require('objection');

class devices extends Model {

  static get tableName() {
    return 'devices';
  }

  static get jsonSchema() {
    return {
      type: 'object',
      required: ['macAddress'],

      properties: {
        macAddress: { type: 'string' },
        circuitId: { type: 'integer' },
      }
    };
  }

  static get relationMappings() {

    const Circuit = require('./circuits.model')();
    const DeviceType = require('./device-types.model')();

    return {
      circuit: {
        relation: Model.BelongsToOneRelation,
        modelClass: Circuit,
        join: {
          from: 'devices.circuitId',
          to: 'circuits.id'
        }
      }
    };
  }

  $beforeInsert() {
    this.createdAt = this.updatedAt = new Date().toISOString();
  }

  $beforeUpdate() {
    this.updatedAt = new Date().toISOString();
  }
}

module.exports = function (app) {
  const db = app.get('knex');

  db.schema.hasTable('devices').then(exists => {
    if (!exists) {
      db.schema.createTable('devices', table => {
        table.increments('id');
        table.string('macAddress');
        table.integer('circuitId');
        table.timestamp('createdAt');
        table.timestamp('updatedAt');
      })
        .then(() => console.log('Created devices table')) // eslint-disable-line no-console
        .catch(e => console.error('Error creating devices table', e)); // eslint-disable-line no-console
    }
  })
    .catch(e => console.error('Error creating devices table', e)); // eslint-disable-line no-console

  return devices;
};

device.class. js

const { Devices } = require('./devices.class');
const createModel = require('../../models/devices.model');
const hooks = require('./devices.hooks');

module.exports = function (app) {
  const options = {
    Model: createModel(app),
    paginate: app.get('paginate'),
    whitelist: ['$eager', '$joinRelation', '$modifyEager'],
    allowedEager: ['circuit']
  };

  // Initialize our service with any options it requires
  app.use('/devices', new Devices(options, app));

  // Get our initialized service so that we can register hooks
  const service = app.service('devices');

  service.hooks(hooks);
};

Затем я вызываю запрос / devices GET используя http://localhost: 3030 / устройства ? $ eager = circuit

, и результат:

{
    "name": "GeneralError",
    "message": "Cannot read property 'get' of undefined",
    "code": 500,
    "className": "general-error",
    "data": {},
    "errors": {}
}

Попытался добавить пользовательский Метод find () для devices.class. js, но это, похоже, не помогает.

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

1 Ответ

0 голосов
/ 29 января 2020

Похоже, ваша переменная app не определена. Отладчик может вам очень помочь, если вы добавите точку останова и проверите стек вызовов, чтобы понять, почему ... Может быть, вы не везде правильно передаете его своим модулям.

Этот код выдает вашу ошибку:

https://runkit.com/embed/kipjj807i90l

...