Sail.js - 路由到方法,自定义策略& PATCH方法

时间:2013-11-05 09:52:17

标签: sails.js

我有一些问题,我无法在网上找到答案。

  1. sails.js框架是否支持HTTP PATCH方法?如果没有 - 有人知道将来是否有计划的功能?

  2. 默认情况下,如果我在控制器中创建方法,可以使用GET请求访问它是routes.js文件,我需要指定该方法只能通过POST或其他类型的方法访问?

  3. 您如何创建一个策略,允许仅为具有用户的特定权限更改实体上的受保护字段。即:创建实体的用户可以更改“名称”,“描述”字段,但除非用户是ADMIN,否则无法更改“注释”数组?

  4. 如何为“find”方法添加自定义标头,该方法指定数据库中有多少项?即:我有/ api / posts /我确实查询了特定项目{skip:20; limit:20}我希望得到这些项目的响应以及与没有SKIP和LIMIT修饰符的查询匹配的项目总数。我想到的一件事是,添加自定义标题的政策将是一个不错的选择,但也许有更好的选择。

  5. 有没有办法编写一个在向客户端发送响应之前执行的中间件。即:我只是希望过滤输出JSON而不是包含某些值,或者在不触及控制器方法的情况下添加我自己的值。

  6. 提前谢谢

1 个答案:

答案 0 :(得分:2)

我可以帮助2和5.根据我自己的经验,这就是我所做的:

2)我通常只是检查控制器中的req.method。如果这不是我想要支持的方法,我会回复404页面。例如:

    module.exports = {
        myAction: function(req, res){
            if (req.method != 'POST')
                return res.notFound();

            // Desired controller action logic here
        }
    }

5)当我想这样做时,我在api / services中创建服务。您可以在接受回调作为参数的服务中定义函数,以便您可以在服务函数完成执行后从控制器发送响应。您可以通过文件名访问任何服务。例如,如果我在api / services中有MyService.js,并且我需要它来处理请求体,我会像这样添加一个函数:

exports.myServiceFunction = function(requestBody, callback){
    // Work with the request body and data access here to create
    // data to give back to the controller
    callback(data);
};

然后,我可以从控制器中使用此服务,如下所示:

    module.exports = {
        myAction: function(req, res){
            MyService.myServiceFunction(req.body, function(data){
                res.json(data);
            });
        }
    }

在您的情况下,服务通过回调发送回控制器的数据将是过滤后的JSON。

对不起,我不能回答你的其他问题,但我希望这会有所帮助。我还是Sails.js的新手,并且不断学习新东西,所以其他人可能会有更好的建议。不过,我希望我已经回答了你的两个问题。