Ничего не возвращалось в перьях js до ассоциации с продолжением крючка

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

users.belongsToMany(models.organizations,{through: 'users_to_organizations'});

Хук до называется attach-orgnaization.js и выглядит так:

module.exports = (options = {}) => {
  return async context => {
    const organizations = context.app.services.organizations.Model;
    context.params.sequelize = {
      include: [{model: organizations}]
    };
    return context;
  };
};

Он установлен в users.hooks.js вот так

....
const attachOrganization = require('../../hooks/attach-organization');
module.exports = {
  before: {
    all: [],
    find: [ authenticate('jwt') ],
    get: [authenticate('jwt'), attachOrganization()],
....

Когда я ПОЛУЧАЮ /users?id=1, я возвращаю пользователя без каких-либо сведений об организации, с которой он связан в users_to_organizations, которой оказывается организация 3 "тестовая организация".

Я ожидал увидеть в ответе дополнительные поля, связанные с организацией.

Вместо этого я вижу только

{
    "total": 1,
    "limit": 10,
    "skip": 0,
    "data": [
        {
            "id": 1,
            "email": "[email protected]",
            "googleId": null,
            "githubId": null,
            "createdAt": "2020-04-29T04:26:49.541Z",
            "updatedAt": "2020-04-29T04:26:49.541Z"
        }
    ]
}

Проходя через отладчик (pycharm), я вижу, что код в хуке выполняется.

Я предполагаю, что либо sequelize не видит взаимосвязи, либо перья не добавляют включение в запрос.

Что я могу упустить?

Спасибо!


person Jeremy Brooks    schedule 02.05.2020    source источник
comment
Проблема заключалась в том, что я использовал строку запроса для указания идентификатора. Хотя это возвращает пользователя, похоже, что это не заставляет перышко-sequelize что-либо делать с параметром include. Использование /users/1, как и должно быть, возвращает организацию с пользователем.   -  person Jeremy Brooks    schedule 03.05.2020


Ответы (1)


В перьях .js метод Get имеет 2 типа

  1. Get: Чтобы получить конкретные данные. Пример: GET /user/:id (id - это идентификатор пользователя)
  2. Find: Чтобы получить все данные с помощью фильтров, Пример: GET /user?name=xyz (он вернет все документы с именем xyz)

Вы добавили attachOrganization() в метод get и вызываете /users?id=1, который является методом FIND. Поэтому либо вызовите его по /users/1 id 1 - это ваш _id, либо добавьте attachOrganization() к хукам метода find

person Guru Prasad mohapatra    schedule 12.05.2020