Шаблоны проектирования для обогащения услуг Feathers реляционными записями - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь создать простое приложение с отношением данных ко многим.Где сайт содержит много мест.Я использую перья JS и Sequelize (с SQLite).Стандартный GET функционал в перьях вернет сайт или список сайтов.Тем не менее, я не понимаю, как вы «должны» возвращать дочерние записи.

Если бы я делал это непосредственно в сиквелизе, я бы сделал что-то вроде:

    db.Site.findAll({
        include: [db.Location]
    }).then(function (sites) {
        res.status(200).json({
            data: sites
        });
    }).catch(err => res.status(500).send({ error: err }));

ИзПохоже, я мог бы поместить эту логику в ловушку (после стандартного запроса?) и заменить собранные данные результатом этого запроса (и удвоить число вызовов в БД).Или я мог бы запросить только местоположения с текущими значениями siteId как их parentId (опять-таки, удвоив число вызовов базы данных).

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

1 Ответ

0 голосов
/ 26 сентября 2019

Это делается с помощью params.sequelize и более подробно описано в этом FAQ и документации по перьям * sequelize , в которой показано использование ловушки before на сервере следующим образом:

// GET /my-service?name=John&include=1
function (context) {
  const { include, ...query };

   if (include) {
      const AssociatedModel = context.app.service('fooservice').Model;
      context.params.sequelize = {
         include: [{ model: AssociatedModel }]
      };
      // Update the query to not include `include`
      context.params.query = query;
   }

   return context;
}
...