根据这个封闭的帆船问题: https://github.com/balderdashy/sails/issues/835
CRUD蓝图覆盖 “绝对,这将在v0.10中出现”
我想修改sailsjs服务中的蓝图以允许命名根(在ember中使用)。 目前,我不得不自定义我创建的每个控制器,其动作与蓝图中已有的重复。
我怀疑我现在可以将这些代码移出我的控制器并进入蓝图覆盖区域,但我不清楚该代码的放置位置。
任何示例,甚至只是指向风帆中相关代码的指针.10 repo将不胜感激。
答案 0 :(得分:38)
为了以下述方式覆盖Sails 1.0中的蓝图,您必须先为项目安装“自定义蓝图”插件(npm install sails-hook-custom-blueprints
)。
要在Sails v0.10中覆盖蓝图,您需要创建一个api/blueprints
文件夹,并在其中添加您的蓝图文件(例如find.js
,create.js
等)。您可以在Sails蓝图钩子中查看the code for the default actions以获得先发优势。
也支持添加自定义蓝图,但它们目前不会自动绑定到路由。如果您创建了/blueprints/foo.js
文件,则可以在/config/routes.js
文件中绑定一个路径(例如):
'GET /myRoute': {blueprint: 'foo'}
答案 1 :(得分:11)
您可以在控制器中添加操作with these names以覆盖默认行为
改变销毁行为
module.exports = {
destroy: function(req,res){
Goal.update({ id: req.param('id') }, { deleted: true })
.exec(function (err, goal) {
if (err) return res.json(err, 400);
return res.json(goal[0]);
});
}
}
答案 2 :(得分:1)
可以使用蓝图中的内置版本,但先运行with policies。这些策略可能会验证用户是否已登录,具有正确的访问权限或类似情况。真的很方便!
在每个模型上,您在存储数据之前和之后都有可用的回调。挖掘:http://sailsjs.com/documentation/concepts/models-and-orm/lifecycle-callbacks
蓝图结果没有可用的默认回调。但是不要放弃。仍然可以使用蓝图中的构建,并仅修改输出。它可能不是最优雅的解决方案,但效果很好。在这里查看我的“黑客”:Sails blueprints lifecycle