【问题标题】:Design Patterns for enriching Feathers services with relational records使用关系记录丰富 Feathers 服务的设计模式
【发布时间】:2019-09-26 05:25:49
【问题描述】:

我正在尝试创建一个具有数据一对多关系的简单应用程序。一个站点包含许多位置。我正在使用羽毛 js 和续集(使用 sqlite)。羽毛中的标准GET 功能将返回一个站点或站点列表。但是,我看不出您是如何“假设”返回子记录的。

如果我直接在 sequelize 中执行此操作,我会执行以下操作:

    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 调用时,都会包含它的子元素。

【问题讨论】:

    标签: typescript feathersjs feathers-sequelize feathers-hook


    【解决方案1】:

    这是通过params.sequelize 完成的,并在this FAQ 和feathers-sequelize documentation 中进行了更详细的记录,其中显示了在服务器上使用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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      相关资源
      最近更新 更多