【问题标题】:How do I extend sails.js library如何扩展sails.js 库
【发布时间】:2013-10-08 06:33:06
【问题描述】:

我想扩展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"]);

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

【问题讨论】:

    标签: javascript node.js express sails.js


    【解决方案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(...);如果您不希望它在您的策略中是静态的,请在您的控制器中。策略通常只不过是快速中间件

    【讨论】:

    • req 是否会被传递给带有限制的控制器?
    • 将其纳入政策范围是一个有趣的想法
    • 是的,您可以在受 ./config/policies.js 中设置的规则影响的所有控制器中使用限制
    【解决方案2】:

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

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

    // models/example.js
    
    module.exports = {
      schema: true,
      attributes: {...}
    }
    

    全局设置:

    // config/models.js
    
    module.exports.models = {
      schema: true,
      ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-16
      • 2015-10-17
      • 2013-09-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多