如何扩展sails.js库

时间:2013-10-08 06:33:06

标签: javascript node.js express sails.js

我想扩展sailsjs以获得类似rails强参数的东西 即

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"]);

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

2 个答案:

答案 0 :(得分:1)

我认为你可以创建一个policy

// 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(...);在您的控制器中,如果您不希望它在策略中保持静态。政策通常只是表达中间件

答案 1 :(得分:0)

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

另一方面:如果您只是希望模型不要占用创建请求中的未定义属性,则只需将schema设置为true即可获得相应的模型:

// models/example.js

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

全局设置:

// config/models.js

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