CRUD蓝图覆盖在sails.js中

时间:2014-03-08 19:10:44

标签: node.js ember.js sails.js

根据这个封闭的帆船问题: https://github.com/balderdashy/sails/issues/835

  

CRUD蓝图覆盖   “绝对,这将在v0.10中出现”

我想修改sailsjs服务中的蓝图以允许命名根(在ember中使用)。 目前,我不得不自定义我创建的每个控制器,其动作与蓝图中已有的重复。

我怀疑我现在可以将这些代码移出我的控制器并进入蓝图覆盖区域,但我不清楚该代码的放置位置。

任何示例,甚至只是指向风帆中相关代码的指针.10 repo将不胜感激。

3 个答案:

答案 0 :(得分:38)

更新

为了以下述方式覆盖Sails 1.0中的蓝图,您必须先为项目安装“自定义蓝图”插件(npm install sails-hook-custom-blueprints)。


要在Sails v0.10中覆盖蓝图,您需要创建一个api/blueprints文件夹,并在其中添加您的蓝图文件(例如find.jscreate.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