0

我想扩展sailsjs以具有类似于rails strong params的东西,即

req.params.limit(["email", "password", "password_confirmation"])

我已经将它创建为附加组件,但我希望它自动附加到 request.params

添加在:

limit = function(limiters){
  params = this.all();
  self = Object();
  limiters.forEach(function(limiter){
    if(params[limiter]){
      self[limiter] = params[limiter]
    }
  return self;
}

要求:

req.params.limit = limit;
req.params.limit(["email", "password"]);

我将如何将其作为模块添加到框架中?

4

2 回答 2

1

我想你可以制定一个政策

// policies/limit.js
limit = function(limiters){
params = this.all();
self = Object();
limiters.forEach(function(limiter){
  if(params[limiter]){
    self[limiter] = params[limiter]
  }
return self;
}

module.exports = function limit (req, res, next) {
  req.params.limit = limit;
  req.params.limit(["email", "password"]);
  next();
};

然后您可以在 ./config/policies.js 文件中添加策略。该示例适用于所有控制器/操作。上面的链接中是有关如何将其添加到特定操作的文档。

// config/policies.js
module.exports.policies = { 
'*': 'limit'
};

编辑:当然你可以调用 req.params.limit(...); 如果您不希望它在您的策略中是静态的,请在您的控制器中。策略通常只不过是快速中间件

于 2013-10-08T09:57:43.503 回答
0

我在控制器操作、限制可能的搜索等方面看到了这个用例。

另一方面:当您只想让您的模型不占用创建请求中发现的未定义属性时,您可以简单地将schema相应模型设置为 true:

// models/example.js

module.exports = {
  schema: true,
  attributes: {...}
}

全局设置:

// config/models.js

module.exports.models = {
  schema: true,
  ...
}
于 2014-02-05T22:21:52.777 回答