Sails 1.0 не может получить доступ к автоматически сгенерированным маршрутам связанных объектов - PullRequest
0 голосов
/ 16 мая 2019

У меня есть связь между клиентом и бюджетом следующим образом:

//Client.js
module.exports = {
  primaryKey: 'id',

  attributes: {
    id: {
      type: 'number',
      unique: true,
      autoIncrement: true
    },
    name: {
      type: 'string'
    },
    phone: {
      type: 'string',
      unique: true
    },
    email: {
      type: 'string',
      unique: true
    },
    budgets: {
      collection: 'budget',
      via: 'client'
    },
  }
};


// Budget.js
module.exports = {
  primaryKey: 'id',

  attributes: {
    id: {
      type: 'number',
      unique: true,
      autoIncrement: true
    },
    client: {
      model: 'client'
    },
    budgetItems: {
      type: 'json'
    }
  }
};

Итак, POST работает для обеих сущностей, поэтому я могу создать их обоих, но:

 GET /budget/1

возвращает бюджет и идентификатор связанного клиента.

 GET /budget/1/client

возвращает идентификатор клиента без заполнения (как я видел в документации он должен быть заполнен).

 GET /client/1

возвращает атрибуты клиента, а поле, связанное с бюджетами, отсутствует.

 GET /client/1/budgets

возвращает 404 НЕ НАЙДЕНО

Я подписан на это и это официальная документация

Так чего я мог упустить?

Это просто создание ассоциаций в одном направлении, и я сравнил с официальной документацией и примерами третьих сторон и моим кодомвыглядит хорошо.

Заранее спасибо!

Обновление:

Я все еще ищу проблемы, и если я запускаю паруса с опцией --silly, это показываетдоступен следующий маршрут:

Маршрут привязкиe :: get / client /: parentid / budgetts ПОЛИТИКА: локализация
Связывающий маршрут :: get / client /: parentid / бюджеты POLICY: isauth
Связующий маршрут :: get / client /: parentid / budgetts BLUEPRINT: заполнить

, но если я пытаюсь получить доступ, возвращает 404 Not Found и консоль показывает следующую ошибку, выданную populate.js из основного кода Sails:

verbo: In populate blueprint action: у указанной родительской записи (1) нет budgets.

Update2:

Отладка с помощью консоли парусов, которую я виделАссоциация сформирована правильно.С учетом Client.findOne({id: 1}).populate('budgets').then((client)=>{console.log(client)}) вывести клиентские атрибуты и связанные с ними Бюджеты, но при этом вернуть 404 Не найдено, когда: GET /client/1/budgets

Ответы [ 2 ]

1 голос
/ 28 мая 2019

благодаря команде SailsJS мы нашли проблему, которая была связана со сторонним пакетом, и мне просто пришлось удалить ее из моего проекта.Это был sails-hook-deep-orm, чей владелец был предупрежден.Я надеюсь, что кто-то с той же проблемой дойдет до этого поста.

Спасибо вам все равно !!

Вопрос доступен там

1 голос
/ 27 мая 2019

Я создал быструю демоверсию, и она, кажется, работает нормально для меня.

Для демонстрации я использовал паруса версии 1.2.2 и sails-disk в качестве базы данныхи есть небольшая разница в атрибутах модели, как показано ниже. Client.js

module.exports = {
  attributes: {
    name: {
      type: 'string'
    },
    phone: {
      type: 'string',
      unique: true,
      required: true
    },
    email: {
      type: 'string',
      unique: true,
      required: true
    },
    budgets: {
      collection: 'Budget', // <<== B is capital here
      via: 'client'
    },
  },
};

Budget.js

module.exports = {
  attributes: {
    client: {
      model: 'Client' // <<== C is capital here
    },
    budgetItems: {
      type: 'json'
    }
  },
};

Дайте мне знать, если это полезно

...