Rest 为什么Sails v.0.10.x会以一对多关联响应POST-to嵌套路由?
在我的应用程序中,我有两个型号Rest 为什么Sails v.0.10.x会以一对多关联响应POST-to嵌套路由?,rest,sails.js,sails-mongo,Rest,Sails.js,Sails Mongo,在我的应用程序中,我有两个型号Person和Room。我还有两个控制器,PersonController和RoomController。我没有添加任何自定义路由,也没有覆盖任何样板控制器操作 例如,当我将发布到/room/5/person时,将创建一个person记录,并按预期与room/5关联-很好。但是,在对这个POST的响应中返回的JSON包含房间和所有与房间相关联的人,侧面加载在一个数组中。我希望Sails只返回创建的人(或者最多返回新创建的人和房间,如果blueprints.popul
Person
和Room
。我还有两个控制器,PersonController
和RoomController
。我没有添加任何自定义路由,也没有覆盖任何样板控制器操作
例如,当我将发布到/room/5/person
时,将创建一个person记录,并按预期与room/5
关联-很好。但是,在对这个POST
的响应中返回的JSON包含房间和所有与房间相关联的人,侧面加载在一个数组中。我希望Sails只返回创建的人(或者最多返回新创建的人和房间,如果blueprints.populate:true
)
我需要对所做的哪些更改,以便Sails只返回由于POST
而创建的人员
以下是我当前的代码:
/api/models/Room.js
// Room.js
module.exports = {
autosubscribe: ['update', 'add:people'],
attributes: {
name: 'string',
// Has-many association
// A room can have many people
people: {
collection: 'person',
via: 'room'
}
}
};
/api/models/Person.js
module.exports = {
autosubscribe: ['update'],
attributes: {
name: 'string',
// Belongs-to association
// A person can belong to only one room
room: {
model: 'room'
}
}
};
/api/controllers/RoomController.js
module.exports = {
};
module.exports = {
};
/api/controllers/PersonController.js
module.exports = {
};
module.exports = {
};
/config/routes.js
module.exports.routes = {
'/': {
view: 'homepage'
}
};
这是故意的;您正在使用“将人员添加到房间”蓝图,因此假设您关心房间的状态。如果您只想返回人员,请使用“创建人员”蓝图,并在有效负载中提供房间ID:
职位/人员
{
name: "John Doe",
room: 5
}
这仍然会发送pubsub通知,告知有人被添加到5号房间。您看过蓝图的代码了吗?如果无法进行配置,那么编写自己的蓝图可能是值得的。谢谢@Xinzz的有用评论。我会研究这个选择。同时,我将根据sgress454的回答重构我的请求。感谢您@sgress454的回答。我将切换到这种方法,因为它显然是“航行方式”。但是,如果我确实希望更改语义,使POST/room/5/person
返回创建的人而不是房间,您是否建议覆盖add.js
blueprint?如果要更改所有模型的行为,覆盖blueprint是一个很好的解决方案。如果您只想将其更改为Room
,您可以将add
方法添加到您的RoomController.js中。