我正在尝试创建一个简单的应用程序,它具有数据一对多的关系。一个站点包含许多位置的地方。我正在使用羽毛js和续集(与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 }));
从feathers指南看来,我似乎可以将此逻辑挂在钩子上(在标准查询之后?),然后用此查询的结果替换收集的数据(并使数据库调用的次数增加一倍)。或者,我可以只查询以当前siteId
作为其parentId
的位置(再次使数据库调用次数增加一倍)。
但是,我想知道是否在羽毛中内置了更整洁的方法,以确保每次进行标准的GET
调用时都包括其子元素。
[这是通过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;
}