3

我有几个问题在网上找不到答案。

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

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

  3. 您将如何创建一个策略,允许仅针对具有用户的特定权限更改实体上的受保护字段。即:创建实体的用户可以更改“名称”、“描述”字段但不能更改“评论”数组,除非用户是管理员?

  4. 您如何将自定义标题添加到“查找”方法中,该方法指定数据库中有多少项目?即:我有 /api/posts/ 并且我查询查找特定项目 {skip: 20; 限制:20} 我想得到这些项目的响应,以及在没有 SKIP 和 LIMIT 修饰符的情况下匹配查询的项目总数。我想到的一件事是添加该自定义标头的策略将是一个不错的选择,但也许有更好的选择。

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

先感谢您

4

1 回答 1

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 的新手,并且不断学习新事物,所以其他人可能会有更好的建议。不过,我希望我已经回答了你的两个问题。

于 2013-11-20T22:33:43.420 回答